题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=860

方法一:不用滚动数组(方法二为用滚动数组,为方法一的简化)

动态规划分析:最少要拿总价值一定,求所拿的最小质量(根据"最大能拿总重量一定,求能拿的最大价值"原理推导)

(PS:为了更好的理解,先不用滚动数组,直接开了两个数组,第一个数组用来储存最少要拿总价值为j时所拿的最小质量,第二个数组用来储存第一个的改变前状态)
例:
最大总质量sw = 5,物品数量n = 4;
          1   2  3  4 <-第i个物品
w[] = {2, 1, 3, 2} //重量
v[] = {3, 2, 4, 2} //价值
最大总质量sw = 5,最大总价值sv = 11,物品数量n = 4;

分析打表结果如下:

 #include<iostream>
using namespace std;
int main() {
int n, sw, sv, v[], w[], m[], b[]; //n为物品数量,sw为总重量,sv为总价值
while(cin >> n >> sw) { //m[j]为最少要拿总价值为j时所拿的最小质量
sv = ; //b[i]用来储存m[i]的上一个状态,如果用滚动数组方法就可以去掉b[]数组
for(int i = ; i <= n; i++) {
cin >> w[i] >> v[i];
sv += v[i];
}
for(int j = ; j <= ; j++) {
m[j] = ; //初始化为题目范围内最大值
b[j] = m[j];
}
m[] = b[] = ;
for(int i = ; i <= n; i++) {
for(int j = ; j <= sv; j++) {
if(j >= v[i]) m[j] = min(b[j], b[j-v[i]]+w[i]);
else m[j] = min(b[j], w[i]);
}
for(int j = ; j <= sv; j++) {
b[j] = m[j];
//b[j] > 1000000000 ? cout << "+ " : cout << b[j] << " "; //去掉这两行注释可打表结果
}
//cout << endl;
}
int big = ; //从价值为1开始找所有能拿到的价值
while(big <= sv && b[big] <= sw) big++;
cout << big- << endl;
}
}

代码实现(点击展开)

方法二:用滚动数组(方法一的简化)

原理:利用方法一的表格,按照价值j倒序计算表中的值

 #include<iostream>
using namespace std;
int main() {
int n, sw, sv, v[], w[], m[]; //n为物品数量,sw为总重量,sv为总价值
while(cin >> n >> sw) { //m[j]为最少要拿总价值为j时所拿的最小质量
sv = ;
for(int i = ; i <= n; i++) { cin >> w[i] >> v[i]; sv += v[i]; }
for(int j = ; j <= ; j++) m[j] = ; //初始化为题目范围内最大值
for(int i = ; i <= n; i++) {
for(int j = sv; j >= ; j--) {
if(j >= v[i]) m[j] = min(m[j], m[j-v[i]]+w[i]);
else m[j] = min(m[j], w[i]);
//m[j] > 1000000000 ? cout << "+ " : cout << m[j] << " "; //去掉这两行注释可打表结果
}
//cout << endl;
}
int big = ; //从价值为1开始找所有能拿到的价值
while(big <= sv && m[big] <= sw) big++;
cout << big- << endl;
}
}

代码实现(点击展开)

开始写于:2016.5.20  ----志银

NYOJ:题目860 又见01背包的更多相关文章

  1. [NYOJ 860] 又见01背包

    又见01背包 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述     有n个重量和价值分别为wi 和 vi 的 物品,从这些物品中选择总重量不超过 W  的物品,求所 ...

  2. NYIST 860 又见01背包

    又见01背包时间限制:1000 ms | 内存限制:65535 KB难度:3 描述 有n个重量和价值分别为wi 和 vi 的 物品,从这些物品中选择总重量不超过 W 的物品,求所有挑选方案中物品价值总 ...

  3. nyoj860 又见01背包(背包变形)

    题目860 pid=860" style="text-decoration:none; color:rgb(55,119,188)">题目信息 执行结果 本题排行 ...

  4. 【志银】NYOJ《题目860》又见01背包

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=860 方法一:不用滚动数组(方法二为用滚动数组,为方法一的简化) 动态规划分析:最少要拿总 ...

  5. NYOJ--860 又见01背包(01背包)

    题目http://acm.nyist.net/JudgeOnline/problem.php?pid=860 分析:题目和普通的01背包问题一样,但是唯一不同的是数据的特殊性. 如果10^9根本就开辟 ...

  6. HDU 2639 骨头收集者 II【01背包 】+【第K优决策】

    题目链接:https://vjudge.net/contest/103424#problem/H 题目大意:与01背包模板题类似,只不过要我们求第K个最大的总价值. 解题分析: 其基本思想是将每个状态 ...

  7. hdu2126 类01背包(三维数组的二维空间优化)

    题目描述: 对于给出的n个物品,每个物品有一个价格p[i],你有m元钱,求最多能买的物品个数,以及有多少种不同的方案 题目分析: 类似01背包的题目,一般的01背包问题我们遇到的是求n个物品,有m的容 ...

  8. Course Selection System ZOJ - 3956 01背包+思维

    Course Selection System ZOJ - 3956 这个题目居然是一个01背包,我觉得好难想啊,根本就没有想到. 这个题目把题目给的转化为  ans = a*a-a*b-b*b 这个 ...

  9. nyoj 203 三国志 dijkstra+01背包

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=203 思路:先求点0到每个点的最短距离,dijkstra算法,然后就是01背包了 我奇怪的 ...

随机推荐

  1. HBase - Phoenix剖析

    1.概述 在<Hadoop-Drill深度剖析>一文当中,给大家介绍了Drill的相关内容,就实时查询来说,Drill基本能够满足要求,同时还可以做一个简单业务上的聚合,如果在使用Hive ...

  2. Office 2013 Excel 转换 Word

    最新文章:Virson's Blog 参考文章:百度百科 1.使用Excel打开需要转换的Excel文档: 2.采用另存为*.htm的方式将该Excel文档另存为网页,如下图: 3.找到保存的htm网 ...

  3. Linux下动态链接库 与gcc 选项

    -L 编译时查找动态链接库的路径 -lxxx(小写)  e.g -lcudart   = link libcudart.so  , -I(大写) 头文件的路径 -rpath (-R), 编译时指定链接 ...

  4. javascript 设计模式之观察者模式

    观察者模式又叫发布——订阅模式,顾名思义pub——sub就是被动触发的,:不要给我......,我会给你.......就是一个发布订阅的解释,实质就是对程序中的某个对象状态进行监听观察,并且在该对象发 ...

  5. 配置NAT回流导致外网解析到了内网IP

    单位有3个域名,用量很大,2014年开始本人研究部署了Bind+DLZ +Mysql的三机智能多链路DNS,非常好用,优点是: 1.使用Mysql管理记录,配置.管理.查询方便. 2.自动判断运营商, ...

  6. 国行手机安装GOOGLE PLAY

    原文地址:http://blog.sina.com.cn/s/blog_68cff87b0101a96k.html 相信国行的手机都是没有google Play 功能的吧,相比其它国外的手机,功能上逊 ...

  7. iOS 复选框做法

    -(void)checkboxClick:(UIButton *)btn{    btn.selected = !btn.selected;} - (void)viewDidLoad {UIButto ...

  8. HandlerMethodArgumentResolver数据绑定无效

    因项目中action参数过多,并且是一些通用的查询参数,所以准备进行对参数统一封装为Map对象,然后由action中传入service中进行处理,查询spring的资料发现可以通过实现HandlerM ...

  9. Drupal 7.23版本升级笔记

    转载请注明出处:http://blog.csdn.net/panjunbiao/article/details/9860849 今天将尝试将Drupal网站从7.22升级到7.23,下面是升级笔记. ...

  10. Windows Phone后台音乐播放本地代理实现讨论

    前一篇文章讨论的wp平台音乐播放的一些遇到的问题,经过苦思冥想和多方参考安卓实现:发现我们可以考虑一种本地代理的思想来完成我们的边听边存,并且流畅拖动进度条.希望大家一起讨论.可以下载我的代码一同研究 ...