hdu_1059(多重背包)
时间:2019-11-12
本文章向大家介绍hdu_1059(多重背包),主要包括hdu_1059(多重背包)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
多重背包的讲解:
多重背包问题https://blog.csdn.net/yandaoqiusheng/article/details/84782655
1 for (int i = 1; i <= n; i++) { 2 int num = min(p[i], V / w[i]); 3 for (int k = 1; num > 0; k <<= 1) { 4 if (k > num) k = num; 5 num -= k; 6 for (int j = V; j >= w[i] * k; j--) 7 f[j] = max(f[j], f[j - w[i] * k] + v[i] * k); 8 } 9 }
本题题解:由于没有空间的限制,只是价值的限制,那么直接考虑用价值作为容量,然后状态定义为在所给物品可以拆分成价值为j的可能性,所有状态除了dp[0] = 0,其他等于-1
状态转移: dp[j] = max(dp[j] , dp[j-k*v[i]]]) k 用上面二分的方法
本题代码:
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int main() 6 { 7 int p[6]; 8 int cnt = 0; 9 while(~scanf("%d%d%d%d%d%d",&p[0],&p[1],&p[2],&p[3],&p[4],&p[5])){ 10 if(p[0]==0&&p[1]==0&&p[2]==0&&p[3]==0&&p[4]==0&&p[5]==0) 11 return 0; 12 int V = 0; 13 for(int i = 0; i < 6; i++){ 14 V += p[i]*(i+1); 15 } 16 if(V%2!=0){ 17 printf("Collection #%d:\n",++cnt); 18 printf("Can't be divided.\n"); 19 puts(""); 20 continue; 21 } 22 int dp[V/2+1]; 23 memset(dp,-1,sizeof(dp)); 24 dp[0] = 0; 25 for(int i = 0;i < 6; i++){ 26 int num = p[i]; 27 for(int k = 1; num>0 ; k<<=1){ 28 if(k>num) k = num; 29 num -= k; 30 for(int j = V/2; j>=k*(i+1); j--){ 31 dp[j] = max(dp[j],dp[j-k*(i+1)]); 32 } 33 } 34 } 35 /*for(int i = 0; i <= V/2; i++){ 36 printf("%d ",dp[i]); 37 } 38 puts("");*/ 39 if(dp[V/2]==0){ 40 printf("Collection #%d:\n",++cnt); 41 printf("Can be divided.\n"); 42 puts(""); 43 } 44 else{ 45 printf("Collection #%d:\n",++cnt); 46 printf("Can't be divided.\n"); 47 puts(""); 48 } 49 } 50 return 0; 51 }
原文地址:https://www.cnblogs.com/shanyr/p/11845010.html
- 迁移式升级的测试(二)(r10笔记第35天)
- Golang实现图片缩放服务器
- mongodb数据结构与基本操作增删改查整理(二)
- 使用在线重定义重构亿级分区表(r10笔记第34天)
- 【Go 语言社区】一个WebSocket的简单Echo例子
- Java基础-day10-代码题-继承&抽象类
- 闪回区空间不足引发的SQL问题分析(r10笔记第32天)
- JavaScript Window - 浏览器对象模型
- 纯CSS实现的圆角折叠菜单特效代码
- MySQL和Oracle中的半连接测试总结(一)(r10笔记第31天)
- 【Go 语言社区】关于select和channel数组的配合使用--转
- Java基础-day09-代码题-对象;类;封装
- MySQL replace into的使用细则(r10笔记第48天)
- Win10下用Anaconda安装TensorFlow
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【s3cmd】给s3cmd加点debug日志再编一个
- Linux获取当前脚本真实路径的方法
- 短视频商城源码,商城左侧菜单栏网页模板
- 谈一谈Linux系统重要的子目录问题
- Tensorflow 2.x Java api的maven包怎么找
- Linux上也有10个流行的Windows应用程序
- (译)SDL编程入门(14)动画精灵和VSync
- 在Ubuntu Linux上安装和使用Git和GitHub
- 10个好用的 HTML5 特性
- Linux下升级python和安装pip的详解
- Linux中使用top命令的技巧
- Linux中查找工具的友好替代方案
- 使用命令行检测Ubuntu版本方法
- 一键实现 PowerBI 度量值批量重命名
- Ubuntu E: 无法获得锁 /var/lib/dpkg/lock-frontend – open (11: 资源暂时不可用)