啊哈算法-游戏币问题(dp)

游戏币问题


描述:

有一个小游戏,在一个矩阵网格里,每个网格里有一定的游戏币。我们可以控制机器人从左上角出发,到右下角结束。机器人只能往下或往右走,并且会拾取沿途经过的格子里的游戏币。请计算机器人最多能得到多少游戏币。

输入:

第一行输入两个整数m和n,分别代表行和列

接下来是一个m行n列的矩阵

输出:

机器人最多能得到多少游戏币

样例输入:

4 5
5 3 6 5 2
2 3 5 9 6
8 10 6 5 3

2 3 11 5 4

样例输出:

51

解题思路:

求前i步的最多游戏币时,用前i-1步的最多游戏币加第i步的游戏币

程序代码:

#include<stdio.h>
#include<string.h>
int Max(int a,int b)
{
	if(a>b)
		return a;
	return b;
}
int main()
{
	int map[60][60],dp[60][60];
	int m,n,i,j;
	while(scanf("%d%d",&m,&n)!=EOF)
	{
		memset(dp,0,sizeof(dp));
		for(i=1;i<=m;i++)
			for(j=1;j<=n;j++)
				scanf("%d",&map[i][j]);	
		for(i=1;i<=m;i++)
			for(j=1;j<=n;j++)
				dp[i][j]=Max(dp[i-1][j],dp[i][j-1])+map[i][j];//因为有i-1、j-1所以最好从1开始存 
		printf("%d\n",dp[m][n]);		
	}
	return 0;
}


猜你喜欢

转载自blog.csdn.net/hezhiying_/article/details/80555067
今日推荐