题解 简单动归 POJ 1157

题意:给N个不同的花,和M个花瓶,不同的花放在不同的花瓶内有不同的美观度。

  求放入N个花后,最大美观度为多少?

做法:用f[i][j]来表示前i朵花放在前j个花瓶的最大美观度,

  有两种情况: 1.f[i-1][j-1]加上当前值。

          2.不加当前值。

代码:

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int MaxN=105;//设置数组最大长度
const int INF=100000;//设置一个无限大的值
int a[MaxN][MaxN],f[MaxN][MaxN];
int main()
{
    int i,j,m,n;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    cin>>a[i][j];//输入美观度
    memset(f, 0, sizeof(f));//初始化所有的函数值为0
    for(i=1;i<=n;i++)
        for(j=0;j<=m;j++)
        f[i][j]=-INF;       //初始i>=1的值为无穷小。
    for(i=1;i<=n;i++)
        for(j=i;j<=m-n+i;j++)
        f[i][j]=max(f[i-1][j-1]+a[i][j],f[i][j-1]);
    cout<<f[n][m]<<endl;
    return 0;
}


posted on 2014-07-21 17:09  一锅土豆  阅读(95)  评论(0编辑  收藏  举报