HihoCoder第七周:完全背包问题
1043 : 完全背包
时间限制:20000ms
单点时限:1000ms
内存限制:256MB
描述
且说之前的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了!
等等,这段故事为何似曾相识?这就要从平行宇宙理论说起了………总而言之,在另一个宇宙中,小Ho面临的问题发生了细微的变化!
小Ho现在手上有M张奖券,而奖品区有N种奖品,分别标号为1到N,其中第i种奖品需要need(i)张奖券进行兑换,并且可以兑换无数次,为了使得辛苦得到的奖券不白白浪费,小Ho给每件奖品都评了分,其中第i件奖品的评分值为value(i),表示他对这件奖品的喜好值。现在他想知道,凭借他手上的这些奖券,可以换到哪些奖品,使得这些奖品的喜好值之和能够最大。
输入
每个测试点(输入文件)有且仅有一组测试数据。
每组测试数据的第一行为两个正整数N和M,表示奖品的种数,以及小Ho手中的奖券数。
接下来的n行描述每一行描述一种奖品,其中第i行为两个整数need(i)和value(i),意义如前文所述。
测试数据保证
对于100%的数据,N的值不超过500,M的值不超过10^5
对于100%的数据,need(i)不超过2*10^5, value(i)不超过10^3
输出
对于每组测试数据,输出一个整数Ans,表示小Ho可以获得的总喜好值。
样例输入
5 1000
144 990
487 436
210 673
567 58
1056 897
样例输出
5940
这周的总结和上周相比,程序只改了一个地方。参见http://blog.csdn.net/u010885899/article/details/45565159,想到之前填的那个表格的话呢,有很好理解了,因为之前一个单元格用到的是上一行的左面的单元格,然后添加或是不添加该物体。这回用到的是这一行左面的单元格,可以想象一下,越往右,即代表着本身可以添加很多次。
比方说d物体的价值是4,重量是5.
best[d][10]要么就是best[c][10],这个很好理解,就是不要你d。
要么等于的是best[d][5],就是要你d。为什么不是之前的best[c][5]了呢?
best[c][5]代表着还未加入d时,此时背包的最优解。如果选择了它,加入d,这时就代表d进入背包啦~但也仅此而已,仅有一次机会。因为下一把就轮到e了。所以是01背包,要么进,要么退,别无二选。
而best[d][5]代表着可能加入了很多次d,也可能一次d都没进去时的最优方案。那这时,容量已经给我备好了(10-5=5),就看这时加上value(d)的价值大不大咯~,所以这里的best[i][j]=max(best[i][j-need[i]]+value[i],best[i-1][j])
代码:
#include <iostream>
using namespace std;
int value[505];
int need[505];
int best[505][100005]={0};
int main()
{
int total_num,total_weight,count;
cin>>total_num>>total_weight;
for(count=1;count<=total_num;count++)
{
cin>>need[count]>>value[count];
}
int i,j;
for(i=1;i<=total_num;i++)
{
for(j=0;j<=total_weight;j++)
{
if(j<need[i])
best[i][j]=best[i-1][j];
else
best[i][j]=max(best[i-1][j],best[i][j-need[i]]+value[i]);
}
}
cout<<best[total_num][total_weight];
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
HihoCoder第七周:完全背包问题的更多相关文章
- hihocoder第七周 完全背包模板题
时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说之前的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! 等等,这段故事为 ...
- 20145213《Java程序设计》第七周学习总结
20145213<Java程序设计>第七周学习总结 教材学习内容总结 周末快乐的时间总是短暂的,还没好好感受就到了要写博客的周日.有人喟叹时间都去哪儿了,那本周我们就来认识一下Java里的 ...
- 20145304 Java第七周学习报告
20145304<Java程序设计>第七周学习总结 教材学习内容总结 1.时间的度量: 格林威治标准时间(GMT)通过观察太阳而得,其正午是太阳抵达天空最高点之时,因地球的公转与自传,会造 ...
- 20145330第七周《Java学习笔记》
20145330第七周<Java学习笔记> 第十三章 时间与日期 认识时间与日期 时间的度量 GMT(格林威治标准时间):现在不是标准时间 世界时(UT):1972年UTC出来之前,UT等 ...
- 20145337《JAVA程序设计》第七周学习总结
20145337 <Java程序设计>第七周学习总结 教材学习内容总结 时间的度量 格林威治时间GMT,世界时UT,国际原子时TAI,世界协调时间UTC 就目前来说,即使标注为GMT,实际 ...
- 第七周PSP
团队项目PSP 一:表格 C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论用户界面 8:20 10:34 20 58 68 分析与 ...
- Linux内核设计第七周 ——可执行程序的装载
Linux内核设计第七周 ——可执行程序的装载 第一部分 知识点总结 一.预处理.编译.链接和目标文件的格式 1.可执行程序是怎么得来的 编译链接的过程 预处理阶段 gcc -E -o XX.cpp ...
- 20145320 《Java程序设计》第七周学习总结
20145320 <Java程序设计>第七周学习总结 教材学习内容总结 13章 时间与日期 时间的度量: 格林威治标准时间(GMT时间),现已不作为标准时间使用. 世界时(UT),秒的单位 ...
- LINUX内核分析第七周学习总结:可执行程序的装载
LINUX内核分析第七周学习总结:可执行程序的装载 韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...
随机推荐
- AWS-DDNS
1. DDNS 2. 在 Linux 实例上设置动态 DNS 2.1 Ubuntu 2.2 Amazon Linux 2 2.3 Arch Linux 2.4 其他Linux系统 3. 更多相关 1. ...
- Flutter | 状态管理特别篇——Provide
前言 今天偶然发现在谷歌爸爸的仓库下出现了一个叫做flutter-provide的状态管理框架,2月8日才第一次提交,非常新鲜.在简单上手之后感觉就是一个字--爽!所以今天就跟大家分享一下这个新的状态 ...
- 吴裕雄--天生自然JAVAIO操作学习笔记:投票程序
public class ExecDemo{ public static void main(String args[]){ new Operate() ; } }; import java.io.B ...
- leetcode LRU缓存机制(list+unordered_map)详细解析
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果密钥 (key) 存 ...
- SSH、SSL与HTTPS的联系
SSH 维基百科中对SSH协议的定义如下 Secure Shell(缩写为SSH),由IETF的网络工作小组(Network Working Group)所制定:SSH为一项创建在应用层和传输层基础上 ...
- IAR STM32F10x_StdPeriph_Driver 3.4转3.6.1库
1.Fatal Error[Pe1696]: cannot open source file core_cmInstr.h STM32F10x_StdPeriph_Driver 3.4库移植换成3.6 ...
- taucs库的使用方法(VS2012)
第一步:到taucs主页下载taucs,我下载的是:Version 2.2 of the code, with external libraries 第二步:在visual studio tools下 ...
- 「NOIP2014」联合权值
传送门 Luogu 解题思路 因为这是一棵树,所以说两个点如果能产生联合权值,那么它们就只能通过唯一的一个中转点来匹配,所以我们就枚举这个中转点. 但是我们又会发现,如果把每个点周围的点抠出来进行两两 ...
- 防止SQL注入的登录页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/T ...
- angularJs-服务调用与后台数据获取
可以用factory做一些后台数据的获取,例如 happyFarm.factory('seedList',['$http',function($http){ return { ge ...