HDU2602 (0-1背包)
Bone Collector
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 39259 Accepted Submission(s): 16261
The bone collector had a big bag with a volume of V ,and along his trip of collecting there are a lot of bones , obviously , different bone has different value and different volume, now given the each bone’s value along his trip , can you calculate out the maximum of the total value the bone collector can get ?
Followed by T cases , each case three lines , the first line contain two integer N , V, (N <= 1000 , V <= 1000 )representing the number of bones and the volume of his bag. And the second line contain N integers representing the value of each bone. The third line contain N integers representing the volume of each bone.
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int w[1100],p[1110]; int f[1110]; int main() {int t,n,v;scanf("%d",&t); while(t--){scanf("%d%d",&n,&v);for(int i=1;i<=n;i++)scanf("%d",&w[i]); //输入物品重量 for(int i=1;i<=n;i++)scanf("%d",&p[i]); //输入物品价值 memset(f,0,sizeof(f));for(int i=1;i<=n;i++) {for(int j=v;j>=w[i];j--) //这个循环保证了放进去的物品重量不会超过背包所能容纳的重量 {if(f[j] < f[j-w[i]] + p[i]) // 如果当前所拥有价值 小于 加上这件物品时创造的价值就更新 f[j]= f[j-w[i]] + p[i]; // f[j] 表示背包重量为 j 时背包里的最大价值,// 所以f[ j - w[i] ] 表示放进这件物品时的状态(因为放进该件物品后容量就减少了) }} printf("%d\n",f[v]);} return 0; }
二维数组:
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 int w[1100],p[1110]; 6 int f[1110][1110]; 7 int main() 8 { 9 int t,n,v; 10 scanf("%d",&t); 11 while(t--) 12 { 13 scanf("%d%d",&n,&v); 14 for(int i=1;i<=n;i++) 15 scanf("%d",&p[i]); 16 for(int i=1;i<=n;i++) 17 scanf("%d",&w[i]); 18 memset(f,0,sizeof(f)); 19 for(int i=1;i<=n;i++) 20 { 21 for(int j=0;j<=v;j++) 22 { 23 if(w[i]<=j) // 这件物品的重量小于当前的容量,也就是说放的进背包 24 { 25 // f[i][j] 表示第 i 件物品在背包容量为 j 时的状态, 26 //所以 f[i-1][j] 表示背包在上一次容量为 j 时候的状态,也就是没放这件物品的时候 27 f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+p[i]);// 比较 没放进去之前 和放进该物品后 的价值,取最大 28 29 } 30 else f[i][j]=f[i-1][j]; // 如果不能放进该物品,则取上一次的状态 31 } 32 } 33 printf("%d\n",f[n][v]); 34 } 35 return 0; 36 }
渣渣一枚,如果有什么不对的地方,还请各位大神批评指正~ (^_^)
转载于:https://www.cnblogs.com/ember/p/4701035.html
HDU2602 (0-1背包)相关推荐
- Python 0/1背包、动态规划
参考:http://www.cnblogs.com/fcyworld/p/6243012.html Python 0/1背包.动态规划 0/1背包问题:在能承受一定重量的背包中,放入重量不同,价值不同 ...
- P1417 烹调方案 (0/1背包+贪心)
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- 算法分析与设计——蛮力法0/1背包
蛮力法0/1背包 蛮力法 蛮力法是一种简单直接解决问题的方法,常常直接基于问题的描述,所以蛮力法也是最容易应用的方法. 蛮力法所依赖 的基本技术是遍历,即采用一定的策略依次处理待求解问题的所有元素,从 ...
- 数据结构与算法 / 回溯算法(八皇后、0 - 1 背包)
回溯算法,顾名思义,就是在没有得到最优解的前提下,不断的返回至前面的岔路口位置,重新选择,直至遍历了所有的情况或者得到的预期最优解的情况下再结束. 与贪心算法不同的是,回溯算法理论上是可以得到最优解, ...
- 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02
/* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...
- HDOJ 2602-Bone Collector(0/1背包模板、打印方案及滚动数组解法)
0/1背包 一.Bone Collector 解法一:二维数组解法(0/1背包模板代码) 1.1 0/1背包打印方案代码 解法二:滚动数组(一维)解法 2.1 一维滚动数组例题 E-爱玩游戏的Tom ...
- 动态规划(五)——0/1背包
0/1背包 一.0/1背包问题 1.实例讲解 2.DP求解0/1背包 3.输出0/1背包方案 二.0/1背包题目代码(持续更新) 一.0/1背包问题 给定n种物品和一个背包,物品i的重量为wi,价值为 ...
- HDU1248 寒冰王座【0/1背包+DP】
寒冰王座 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 动态规划算法初步(6)——0/1 背包
动态规划算法初步(6) 例题五:0/1 背包(背包型) 题目: 一个旅行者有一个最多能装m公斤物品的背包,现在有n件物品,它们的重量分别是w1,w2,-,wn,它们的价值分别为c1,c2,-,cn.若 ...
- 【ICPC-283】hdu 2126 Buy the souvenirs(二维0/1背包)
点击打开链接hdu2126 思路: 二维0/1背包 分析: 1 题目给定n个物品的价钱和m的钱,问最多能买到的物品数有几种方案. 2 很明显就可以写出状态转移方程dp[i][j][k]表示的是前i个物 ...
最新文章
- 5分钟实现Android中更换头像功能
- Delphi使用ADO组件访问ACCESS数据入门例程
- Redis有哪几种数据淘汰策略?
- UE/UX 设计师可临摹的应用模板!
- phpeclipse+xdebug配置
- 我从AI For Everyone学到的十个重要AI 概念
- 上预算管理软件,不如上EXCEL
- 定性和定量大数据分析方法指南
- 淘宝天猫评论爬取,简单的办法完成滑动验证
- Crystal Xcelsius 2008 使用Excel XML映射链接
- [HNOI2004]宠物收养所
- google网盘 百度网盘文件互传
- Pytorch CPU Tensor与GPU Tensor的运算速度对比测试
- (图解)设置封面中的下划线一样长
- VA软屏和IPS硬屏的区别
- axp202电源管理
- 基于ESO的永磁同步电机无感FOC 采用线性扩张状态观测器(LESO)估计电机反电势,利用锁相环从反电势中提取位置和转速信息
- Android 12 Beta正式亮相;5 月 19 日凌晨 1 点 阔别 2 年的 Google I/O 开发者大会内容集锦
- usee2008免费网络电视最新版下载
- Linux发展历史年表
热门文章
- linux线程池简单实例
- js中四种创建对象的方式
- 除了修改WEBCONFIG会导致WEB服务重启外,还有其他的什么操作会导致重启?
- Windows Phone 7.1 “芒果” SDK Beta 下载地址
- .NET Framework 如何:提高性能
- linux shell 自定义函数(定义、返回值、变量作用域)介绍
- The type sun.management.ManagementFactory is not visible
- libuv 原理_Libuv初理解
- 关于猿如何找对象,心里没点那啥数吗?
- java程序运行结果题_2016年关于Java编程与程序运行结果笔试题