题目描述
一个迷宫需要从左上角需要走到右下角,迷宫中的每一个格子,都会对人造成一定的伤害,求走到最下角的最小伤害。只能向右或者向下走。
输入
测试实例包括T组测试数据。(T <= 100)
每组测试数据第一行为两个数字m和n,代表迷宫的行和列。 之后m行数据,每行n个数字,代表走到该格子对人造成的伤害。(1 <= m,n <= 10, 0 <= 伤害值 <= 100)
输出
对于每组测试数据,输出走到右下角的最小伤害。
样例输入2
1 1
5
2 2
1 2
3 4
样例输出5
7
#include<bits/stdc++.h>
using namespace std;
int main(){
int t, m, n, i, j;
int a[11][11], b[11][11];
scanf("%d", &t);
while (t--){
scanf("%d%d", &m, &n);
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++)
scanf("%d", &a[i][j]);
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++)
{
if (i == 1 && j == 1)b[1][1] = a[1][1];
else if (i == 1 && j != 1)b[i][j] = b[i][j - 1] + a[i][j];
else if (i != 1 && j == 1)b[i][j] = b[i - 1][j] + a[i][j];
else{
b[i][j] = min(b[i - 1][j], b[i][j - 1]) + a[i][j];
}
}
printf("%d\n", b[m][n]);
}
return 0;
}