混合背包模板(01+多重+完全)
2016-04-22 14:02
253 查看
描述
输入w,v,m.m表示数量,m=-1表示无限多个.
题解
#include<cstdio> #include<algorithm> using std :: max; const int maxn=205,maxw=200005; int dp[maxw],v[maxn],w[maxn],m[maxn]; int N,W; void zero_one(int vi,int wi) { for(int j=W;j>=wi;j--) dp[j]=max(dp[j],dp[j-wi]+vi); } void complete(int vi,int wi) { for(int j=wi;j<=W;j++) dp[j]=max(dp[j],dp[j-wi]+vi); } void multy(int i,int vi,int wi,int mi) { for(int k=1;k<mi;k*=2) { zero_one(k*vi,k*wi); mi-=k; } zero_one(mi*vi,mi*wi); } void solve() { for(int i=1;i<=N;i++) { if(m[i]==-1) complete(v[i],w[i]); else if(m[i]==1) zero_one(v[i],w[i]); else multy(i,v[i],w[i],m[i]); } printf("%d\n",dp[W]); } void init() { scanf("%d%d",&N,&W); for(int i=1;i<=N;i++) scanf("%d%d%d",&w[i],&v[i],&m[i]); } int main() { init(); solve(); return 0; }
相关文章推荐
- OpenCV之objdetect 模块. 物体检测:级联分类器
- lkmusic项目完整代码以及使用离线存储优化
- Mysql查看执行计划
- Mysql查看执行计划
- vs2015 好用插件
- android 代码+xml 设置光标颜色
- fallocate快速创建大文件
- C/C++内存管理函数的使用
- Linux ssh远程登录到另一台机器命令
- Android 虚拟运营商apn与spn配置
- 应用开发不可不知的五大BaaS后端云服务
- node应用通过multer模块实现文件上传
- Asc函数与Chr函数
- 2016西电校赛网络赛 Problem G 合并模板
- OpenCV之feature2d 模块. 2D特征框架(2)特征描述 使用FLANN进行特征点匹配 使用二维特征点(Features2D)和单映射(Homography)寻找已知物体 平面物体检测
- 申请内存的方式(1,malloc/free;2,new/delete)
- 51单片机控制电动机正反转和调速
- 浅析jQuery EasyUI响应式布局的实现方案
- 关于GIT VCS的使用(公司资料)
- linux下memcached安装以及启动