ACM PKU 1157 LITTLE SHOP OF FLOWERS http://poj.org/problem?id=1157

明显的动态规划题,状态转移方程为:dp[i][j]=max{(dp[i-1][j-1]+A[i]),dp[i][j]};

下面附上我的代码:

#include <iostream>
#include <string.h>
#include <stdio.h>

const int inf=0x3fffffff;
const int maxn=101;
using namespace std;

int dp[maxn][maxn],num[maxn][maxn];

void solve(int bunches,int vases)
{
    for(int i=0;i<vases;i++)
        dp[0][i]=num[0][i];
    for(int i=1;i<bunches;i++)
    for(int j=0;j<vases;j++)
    {
        if(j<i) dp[i][j]=-inf;
        else
        {
        int tmp=-inf;
        for(int k=0;k<j;k++)
        {
            if(dp[i-1][k]+num[i][j]>tmp)    tmp=dp[i-1][k]+num[i][j];
        }
        dp[i][j]=tmp;
        }
    }
    int temp=-inf;
    for(int i=0;i<vases;i++)
    {
        if(dp[bunches-1][i]>temp) temp=dp[bunches-1][i];
    }
    printf("%d\n",temp);
}

int main()
{
    int bunches,vases;
    //freopen("in.txt","r",stdin);
    while(scanf("%d%d",&bunches,&vases)==2)
    {
        for(int i=0;i<bunches;i++)
        for(int j=0;j<vases;j++)
        {
            scanf("%d",&num[i][j]);
        }
        solve(bunches,vases);
    }
    return 0;
}

  

posted on 2011-08-07 10:16  _Clarence  阅读(97)  评论(0编辑  收藏  举报

导航