ZZULIOJ 2428: 最小伤害

题目描述
一个迷宫需要从左上角需要走到右下角,迷宫中的每一个格子,都会对人造成一定的伤害,求走到最下角的最小伤害。只能向右或者向下走。

输入
测试实例包括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;
}



猜你喜欢

转载自blog.csdn.net/weixin_43731933/article/details/84726556