二进制优化多重背包
Posted lamboofhome
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二进制优化多重背包相关的知识,希望对你有一定的参考价值。
核心: 用一些二进制数进行祝贺代替所有的数。
代码:
#include <bits/stdc++.h> using namespace std; const int M = 10005; const int N = 10005; #define ri register int struct setdian{ int val,v; }p[N]; int n,v,w,num,cent,f[N]; int main(){ scanf("%d",&n); while(n--) { scanf("%d%d%d",&num,&v,&w); for(ri k=1;k<=num;k<<1) { p[++cent].v=k*v; p[cent].val=k*w; } if(p[cent].v<num*v) p[++cent].v=num*v,p[cent].val=num*w; } scanf("%d",&v); for(ri i=1;i<=cent;i++) for(ri j=v;j>=p[i].v;j--) { f[j]=max(f[j-p[i].v]+p[i].val,f[j]); } }
https://i-beta.cnblogs.com/posts/edit
以上是关于二进制优化多重背包的主要内容,如果未能解决你的问题,请参考以下文章
动态规划背包问题总结:01完全多重与其二进制优化分组背包 题解与模板