码迷,mamicode.com
首页 > 移动开发 > 详细

去地里收苹果!

时间:2015-11-13 00:55:33      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:

 

在n*m的一块苹果田中,没一单位面积都有若干苹果,从(1,1)坐标开始采集,每次只能向下或向右移动,请问采集的最多苹果个数? :)

for example:

3 3

1 2 3

6 8 9

1 1 1

很明显答案是:25 。

先向下1步,然后向右2步,再向下1步。

 

思路:

代码中dp数组,用来存储当前状态最大值,apple数组用来存储对应地点的苹果数目。

这题要用动态规划,求采集苹果最多个数,其实就是求走到(n,m)坐标时最多个数。

分成一个个子问题,对于当前坐标(i,j),只可能是从(i-1,j)或者是从(i,j-1)移动过来的。

所以dp[i][j]=max(dp[i-1][j],dp[i][j-1])+apple[i][j]。

 

代码:

 

#include<stdio.h>
#include<string.h>
#define MAX 100
int main()
{
    int n,m;
    int dp[MAX+7][MAX+7],apple[MAX+7][MAX+7];
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%d",&apple[i][j]);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                dp[i][j]=dp[i-1][j]>=dp[i][j-1]?dp[i-1][j]:dp[i][j-1];
                dp[i][j]+=apple[i][j];
            }
        }
        printf("%d\n",dp[n][m]);
    }
    return 0;
}

 

去地里收苹果!

标签:

原文地址:http://www.cnblogs.com/burning-flame/p/4960676.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!