洛谷1854花店橱窗布置

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;
}

猜你喜欢

转载自blog.csdn.net/ACerAndAKer/article/details/81232588
今日推荐