P1757 通天之分组背包
Posted for-miku
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1757 通天之分组背包相关的知识,希望对你有一定的参考价值。
-----------------
链接:Miku
-----------------
分组背包,我们只需要在01背包的基础上稍加修改,把同一类的物品同时枚举即可。
-----------------
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,m; struct th{ int v; int w; int l; } t[100001]; int dp[100001]; int num[100001]; bool cmp( th x,th y){ return x.l<y.l; } int vis[1001]; int cnt; int main(){ scanf("%d%d",&m,&n); for(int i=1;i<=n;++i){ cin>>t[i].v>>t[i].w>>t[i].l; if(!vis[t[i].l]){ vis[t[i].l]=1; cnt++; } num[t[i].l]++; } sort(t+1,t+n+1,cmp); int l=1; //for(int i=1;i<=n;++i){ // printf("%d %d %d ",t[i].w,t[i].v,t[i].l); //} int summ=0; for(int i=1;i<=cnt;++i){ summ+=num[i-1]; for(int j=m;j>=0;--j){ for(int k=1;k<=num[i];++k){ if(j>=t[summ+k].v) dp[j]=max(dp[j],dp[j-t[summ+k].v]+t[summ+k].w); } } } printf("%d",dp[m]); return 0; }
以上是关于P1757 通天之分组背包的主要内容,如果未能解决你的问题,请参考以下文章