第一行输入整数
—— 测试组数。
接下来
行,每行输入
个整数
。
对每组数据输出一个整数,表示最少操作次数。
2 10 100 200 300 10 10 10 10
5 0
样例1:
第一组测试数据,可能的操作是:
初始
将弹药增加,变成
将弹药减少,变成
将钢材增加到上限,变成
将钢材减少,变成
将铝增加到上限,变成
可以发现无法使用次以下的操作来达到开发所需的资源量,所以答案为
。
第二组测试数据,开发所需的资源量就为资源初始值,所以不需要进行任何操作。
package main import ( "fmt" ) type Node struct{ value, step int } var result [301]int // 存储10到其他数值所需的操作次数 func BFS() { // 计算10到其他数值所需的操作次数 for i:=0;i<=300;i++{ result[i] = -1 } queue := []Node{{10,0}} result[10]=0 var cur Node var dist []int for len(queue) > 0{ cur = queue[0] queue = queue[1:] dist = []int{ cur.value-1,cur.value+1, cur.value+100,cur.value-100, cur.value+10, cur.value-10, 10, 300, } for _, d := range dist { if d < 10 || d >300 || result[d] != -1{ continue } result[d] = cur.step + 1 queue = append(queue, Node{d, cur.step+1}) } } } func main() { var a, b, c, d int var t int fmt.Scanf("%d", &t) BFS() for t >0 { t-- fmt.Scanf("%d %d %d %d", &a, &b, &c, &d) fmt.Println(result[a]+result[b]+result[c]+result[d]) } }