博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1014多重背包
阅读量:6351 次
发布时间:2019-06-22

本文共 787 字,大约阅读时间需要 2 分钟。

题意:给出价值为1,2,3,4,5,66种物品数量,问是否能将物品分成两份,使两份的总价值相等。

 

思路:求出总价值除二,做多重背包,需要二进制优化。

 

代码:

#include
#include
#include
using namespace std;int n[7];int v,sum;bool flag;int dp[100000];/*完全背包*/void CompletePack(int cost,int weight){ for(int i=cost;i<=v;i++) { dp[i]=max(dp[i],dp[i-cost]+weight); if(dp[i]==v) //剪枝 { flag=true; return; } } return;}/*01背包*/void ZeroOnePack(int cost,int weight){ for(int i=v;i>=cost;i--) { dp[i]=max(dp[i],dp[i-cost]+weight); if(dp[i]==v) //剪枝 { flag=true; return; } } return;}/*多重背包*/void MultiplePack(int cost,int weight,int amount){ if(cost*amount>=v) { CompletePack(cost,weight); return; } if(flag) //剪枝 return; /*二进制优化*/ int k=1; while(k

 

转载于:https://www.cnblogs.com/amourjun/p/5134115.html

你可能感兴趣的文章
取消凭证分解 (取消公司下的多个利润中心)
查看>>
flask ORM: Flask-SQLAlchemy【单表】增删改查
查看>>
vim 常用指令
查看>>
nodejs 获取自己的ip
查看>>
Nest.js 处理错误
查看>>
你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算...
查看>>
18.3 redis 的安装
查看>>
jdbc 简单连接
查看>>
Activiti 实战篇 小试牛刀
查看>>
java中的Static class
查看>>
Xshell 连接CentOS服务器解密
查看>>
[工具类]视频音频格式转换
查看>>
GNS3与抓包工具Wireshark的关联
查看>>
groovy-语句
查看>>
VIM寄存器使用
查看>>
Java VisualVM远程监控JVM
查看>>
nasm预处理器(2)
查看>>
二叉排序树 算法实验
查看>>
Silverlight 5 beta新特性探索系列:10.浏览器模式下内嵌HTML+浏览器模式下创建txt文本文件...
查看>>
YourSQLDba 配置——修改备份路径
查看>>