poj1157 LITTLE SHOP OF FLOWERS

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int n,m;
#define MIN -65530
int a[110][110];
int d[110][110];//到达此点之后还能获得的最大值
void dp(int i,int j)
{
    int jj;
    for(jj=j+1;jj<=m-n+i+1;jj++)
    {
        if(d[i+1][jj]==MIN)
        {
            dp(i+1,jj);
        }
        if(d[i][j]<d[i+1][jj]+a[i+1][jj])
        {
            d[i][j]=d[i+1][jj]+a[i+1][jj];
        }
    }
}
int main()
{
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        int i,j;
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                scanf("%d",&a[i][j]);
                d[i][j]=MIN;
            }
        }
        for(i=0;i<n;i++)
        {
            d[i][m-1]=0;
        }
        int mmax=MIN;
        for(j=0;j<=m-n;j++)
        {
            dp(0,j);
            if(mmax<d[0][j]+a[0][j])
            {
                mmax=d[0][j]+a[0][j];
            }
        }
        printf("%d\n",mmax);
    }
    return 0;
}

 

posted @ 2012-08-07 22:03  willzhang  阅读(183)  评论(0编辑  收藏  举报