题解 简单动归 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;
}
浙公网安备 33010602011771号