题目描述
一个迷宫需要从左上角需要走到右下角,迷宫中的每一个格子,都会对人造成一定的伤害,求走到最下角的最小伤害。只能向右或者向下走。
输入
测试实例包括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;
}