多重背包问题的二进制优化
Posted programyang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多重背包问题的二进制优化相关的知识,希望对你有一定的参考价值。
算法:二进制优化,动态规划
#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N=2010; int v[N],w[N],cnt; int f[N]; int main(void) int n, m; cin>>n>>m; for(int i=1,a,b,s;i<=n;i++) cin>>a>>b>>s; int k=1; while(k<=s) cnt++; v[cnt]=a*k; w[cnt]=b*k; s-=k; k*=2; if(s>0) cnt++; v[cnt]=a*s; w[cnt]=b*s; n=cnt; for(int i=1;i<=n;i++) for(int j=m;j>=v[i];j--) f[j]=max(f[j],f[j-v[i]]+w[i]); cout<<f[m]<<endl; return 0;
以上是关于多重背包问题的二进制优化的主要内容,如果未能解决你的问题,请参考以下文章