P1757 通天之分组背包 题解

题目链接

 分组背包的裸题……依据组数,体积,物品从外到内的顺序进行循环即可。转移与01背包类似

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<climits>
#include<vector>
using namespace std;
int zu,xh[105][1005],f[1005];
int wp[105],c[1005],w[1005];
int main()
{
    memset(wp,0,sizeof(wp));
    ios::sync_with_stdio(false);
    int m,n;
    cin>>m>>n;
    for(register int i=1;i<=n;i++)
    {
        int q;
        cin>>w[i]>>c[i]>>q;
        wp[q]++;
        zu=max(zu,q);
        xh[q][wp[q]]=i;
    }
    for(register int i=1;i<=zu;i++)
    {
        for(register int j=m;j>=0;j--)
        {
            for(register int k=1;k<=wp[i];k++)
            {
                if(j>=w[xh[i][k]])
                {
                    f[j]=max(f[j],f[j-w[xh[i][k]]]+c[xh[i][k]]);

                }

            }

        }
    }
    cout<<f[m];
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/qnickx/p/10679587.html
今日推荐