分组背包

分组背包是LC(01)背包的一种变形吧。它就是给你一点质量,你不一定全部质量都要选,可以看看HDUOJ的Saving HDU,如果用01背包算出来就是3,用分组背包或者贪心算出来就是5
模板

//n为物品种类,v是背包容量,pi为物品价格,m为物品质量 //前面的i也得是1,不能是0 for(int i=1; i<=n; i++){ for(int j=v; j>=0; j--){ for(int k=1; k<=m[i]; k++){ int t1=k,t2=k*pi[i]; if(j

【分组背包】
Title
分组背包
文章图片
某一水题
#include #include #include using namespace std; int n,t,w1[1000001],w2[1000001],t1[1000001],t2[1000001],dp[1000001]; int main(){ cin>>n>>t; for(int i=0; i>w1[i]>>t1[i]>>w2[i]>>t2[i]; for(int i=0; i=min(t1[i],t2[i]); j--){ if(t1[i]<=j) dp[j]=max(dp[j],dp[j-t1[i]]+w1[i]); else dp[j]=max(dp[j],dp[j-t2[i]]+w2[i]); } cout<

    推荐阅读