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;
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值