题意:现在有F束不同品种的花束,同时有至少同样数量的花瓶被按顺序摆成一行,其位置固定于架子上,并从1至V按从左到右顺序编号,V是花瓶的数目(F≤V)。花束可以移动,并且每束花用1至F的整数唯一标识。标识花束的整数决定了花束在花瓶中排列的顺序,如果i<j,花束i必须放在花束j左边的花瓶中。每个花瓶只能放一束花。如果花瓶的数目大于花束的数目,则多余的花瓶空置。
每一个花瓶都具有各自的特点。因此,当各个花瓶中放入不同的花束时,会产生不同的美学效果,并以一美学值(一个整数)来表示,空置花瓶的美学值为零。为取得最佳美学效果,必须在保持花束顺序的前提下,使花束的摆放取得最大的美学值。请求出具有最大美学值的一种摆放方式。
dp[i][j]=max(dp[i-1][j-1]+w[i][j],dp[i][j-1]);
代码如下:
#include <iostream>
using namespace std;
int dp[105][105];
int wei[105][105];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int n,m;
cin>>n>>m;
int i,j;
for(i=1;i<=n;i++)
for (j=1;j<=m;j++)
cin>>wei[i][j];
for(i=1;i<=n;i++)
for (j=i;j<=m;j++)
{
dp[i][j]=dp[i-1][j-1]+wei[i][j];
if(j>i)
dp[i][j]=max(dp[i][j],dp[i][j-1]);
}
cout<<dp[n][m]<<endl;
return 0;
}