dp水题,我们发现第i个花最少要在第i个花瓶里,所以我们枚举每个花放在哪个花瓶里
这个花放在这里与不放在这里取max
f[i][k]=max(f[i][k],f[i-1][j-1]+c[i][k])
代码
//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=-10000000;
int n,m,qlm;
int c[200][200],f[120][120];
void coutt(int x,int y)
{
if (x>0)
{
int qlm=x;
while (f[x][qlm]!=y) qlm++;
coutt(x-1,y-c[x][qlm]);
printf("%d ",qlm);
}
return ;
}
int main()
{
cin>>n>>m;int ans=0;
for (int i=1;i<=n;i++)
for (int k=1;k<=m;k++)
scanf("%d",&c[i][k]),f[i][k]=M;
for (int i=1;i<=n;i++)
for (int k=i;k<=m;k++)
for (int j=i-1;j<k;j++)
f[i][k]=max(f[i][k],f[i-1][j]+c[i][k]);
for (int i=n;i<=m;i++) ans=max(ans,f[n][i]);
cout<<ans<<endl;
coutt(n,ans);
return 0;
}