您的位置:首页 > 运维架构

poj 1157 LITTLE SHOP OF FLOWERS

2011-07-22 19:02 274 查看
/*

题意: 有n束花和m个花瓶,一束花 i 插在一个花瓶 j 中都有一个对应的美观值 A[i][j],
现在要将这n束花全部插入花瓶中并使得所有的花的美观值最大,求该最大值.
题目规定若i<j,则第i束花必须出现在第j束花之前,
设 ans[i,j] 为前 i 束花插在前 j 个花瓶中的最大美学值,
则有状态转移方程:ans[i,j]=max(ans[i-1,k-1]+A[i,k]),其中i<=k<=j,
A[i,k] 为第 i 束花插在第 k 个花瓶中的美学值,规定ans[0,j]=0,0<=j<=m

*/

#include <iostream>        //DP
using namespace std;
int A[105][105],ans[105][105];
#define MIN INT_MIN
int dp(int i,int j)    // 求前 i 束花插在前 j 个花瓶中的最大美学值ans[i][j]
{
if(ans[i][j]!=MIN)    // 说明ans[i][j]已求解
return ans[i][j];
int t=MIN;
for(int k=i;k<=j;++k)
{
if(dp(i-1,k-1)+A[i][k]>t)
t=dp(i-1,k-1)+A[i][k];
}
ans[i][j]=t;
return ans[i][j];
}
int main()
{
int n,m;    //n束花,m个花瓶
cin>>n>>m;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
cin>>A[i][j];
fill(&ans[1][1],&ans[n+1][m+1],MIN);
for(int j=0;j<=m;++j)
ans[0][j]=0;
cout<<dp(n,m)<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: