游戏币问题
描述:
有一个小游戏,在一个矩阵网格里,每个网格里有一定的游戏币。我们可以控制机器人从左上角出发,到右下角结束。机器人只能往下或往右走,并且会拾取沿途经过的格子里的游戏币。请计算机器人最多能得到多少游戏币。
输入:
第一行输入两个整数m和n,分别代表行和列
接下来是一个m行n列的矩阵
输出:
机器人最多能得到多少游戏币
样例输入:
4 55 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; }