dp[i][j] 表示前i个花瓶装j朵花,类似于体积刚好为V的01背包问题
在本题中花瓶可以选择使用或者不使用,类似于背包问题中的物品,背包问题中的体积即为本题的花瓶数
总体积为v,有f个物品,每一个体积为1,价值为value[f][v]由于是刚好装满背包,所以初始化dp[][0] = 0;其它初始化为极小值
#include<iostream>
using namespace std;
int max(int a,int b)
{
return a > b ? a : b;
}
int main()
{
int dp[105][105],f,v,i,j,value[105][105];
scanf("%d%d",&f,&v);
for(i = 1;i <= f;i++)
for(j = 1;j <= v;j++)
scanf("%d",&value[i][j]);
for(i = 0;i <= f;i++)
for(j = 1;j <= v;j++)
dp[i][j] = -1000;
for(i = 0;i <= v;i++)
dp[i][0] = 0;
for(i = 1;i <= v;i++)
for(j = 1;j <= f;j++)
dp[i][j] = max(dp[i-1][j],dp[i-1][j-1] + value[j][i]);
printf("%d\n",dp[v][f]);
return 0;
}