[codevs3269] 混合背包
来源:互联网 发布:交大知行大厦地址 编辑:程序博客网 时间:2024/06/06 06:35
题目链接
题解:融合了几种背包问题
#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int M=210;#define Mv MAXV int w[M],v[M],num[M]; int f[M*1000];int T,n,m;int Mv;inline void ZOPack(int w,int v) { for(int j=Mv;j>=w;j--) if(f[j-w]+v>f[j]) f[j]=f[j-w]+v; } inline void CPack(int w,int v) { for(int j=w;j<=Mv;j++) if(f[j-w]+v>f[j]) f[j]=f[j-w]+v; } inline void MPack(int w,int v,int amount) { if(amount*w>=Mv) { CPack(w,v); return ; } for(int k=1;k<=amount;k<<=1)//可以二进制拆分的 { ZOPack(k*w,k*v); amount-=k; } ZOPack(amount*w,amount*v);//拆分剩下的 }void init(){ memset(f,0,sizeof(f)); cin>>m>>Mv; for(int i=1;i<=m;i++) cin>>w[i]>>v[i]>>num[i]; }int main() { init(); for(int i=1;i<=m;i++) { if(num[i]==1) ZOPack(w[i],v[i]); else if(num[i]==-1) CPack(w[i],v[i]); else MPack(w[i],v[i],num[i]); } cout<<f[Mv]<<endl; return 0; }
0 0
- Codevs3269 混合背包
- [codevs3269] 混合背包
- codevs3269 混合背包
- codevs3269混合背包
- Codevs3269 混合背包
- 【codevs3269】混合背包 背包DP裸题
- Codevs3269 混合背包 经典背包dp
- 混合背包
- 混合背包
- 混合背包
- 混合背包
- 混合背包
- 混合背包
- 混合背包
- 混合背包
- 混合背包
- 混合背包
- 混合背包
- [Java] 不使用第三个变量实现两个整数类型变量互换(异或运算符)
- C#新手入门代码 泛型类的静态字段的实例
- caffe学习笔记(一)
- n皇后问题-java版
- 轻院OJ-1912 小火山的爱情密码(尺取法)
- [codevs3269] 混合背包
- 设计模式-单例模式
- zzuliOJ 1905:小火山的跳子游戏(GCD+思维)
- HDU 3172 Virtual Friends 并查集+map
- java数组使用equals()方法报空指针问题
- 训练第五周之最小生成树
- mac下编译protobuf 3.0
- 图片预加载
- POJ 1611 The Suspects 并查集