题解 简单动归 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; }