题目1 : 完全背包

时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

且说之前的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了!

等等,这段故事为何似曾相识?这就要从平行宇宙理论说起了………总而言之,在另一个宇宙中,小Ho面临的问题发生了细微的变化!

小Ho现在手上有M张奖券,而奖品区有N种奖品,分别标号为1到N,其中第i种奖品需要need(i)张奖券进行兑换,并且可以兑换无数次,为了使得辛苦得到的奖券不白白浪费,小Ho给每件奖品都评了分,其中第i件奖品的评分值为value(i),表示他对这件奖品的喜好值。现在他想知道,凭借他手上的这些奖券,可以换到哪些奖品,使得这些奖品的喜好值之和能够最大。

令人欣慰的是,在这个平行世界里小Ho已经学习了一般的01背包问题,所以他并没有思考太久,便提出了自己的想法。

“我们的首要目标仍然是将问题抽象化!在我看来,这个问题其实和01背包问题很像,我们在解决01背包问题的时候是按照奖品的标号从1到N依次决定每件奖品是否选取,那么对于每种奖品有无数件的这个问题,我可以按照奖品的标号从1到N依次决定每种奖品选取的件数!”

小Hi点了点头表示赞同。

小Ho于是继续说道:“那么按照01背包的想法,我可以使用best(i, x)表示已经决定了前i件物品每件物品选择多少件,当前已经选取的物品的所需奖券数总和不超过x时,能够获取的最高的喜好值的和,那么最终的答案便是best(N, M)。”

小Hi道:”的确可以这样,那么你准备如何转移呢?”

小Ho道:“仍然是根据01背包的做法,对于一个问题best(i, x),考虑最后一步——即第i件物品选择多少件,不妨就假设选择k件吧,那么k的取值范围肯定是在0~(x / need(i))这个范围内。这个时候我们可以知道best(i - 1, x - need(i) * k) + value(i) * k将会是一种可能的方案。”

小Hi挠了挠头,问道:”你所说的‘可能的方案’是什么意思?”

小Ho笑道:“就是说best(i, x)的求解满足这个公式~”

说罢,拿过纸笔,列出了一个式子。

小Hi接过纸来,看完说道:“的确没错,总共就是这些可能~那你是否求解这个问题也是用与01背包类似的方法进行求解呢?”

“是的,我会使用这样的方法来做!”小Ho刷刷刷又在纸上写下来几行伪代码。

“应该没有问题,时间复杂度也很不错了~~但是我看着总有点难受!”小Hi点了点头又摇头。

“怎么说?”

小Hi嘻嘻笑了两声,说道:“我们不妨换一种问题定义的方式:用best(i, x)表示已经决定了前i件物品每件物品选择多少件,当前已经选取的物品的所需奖券数总和不超过x时,能够获取的最高的喜好值的和!”

小Ho仔仔细细回忆了下,确认小Hi所说和自己先前并无区别,怒道:“你这和我的定义方法有什么区别呀?”

小Hi道:“别急别急,这部分的确没有区别,有区别的在后头~”

小Ho撇了撇嘴:“那你就说呗~”

小Hi继续道:“我们还是考虑最后一步——要不要再选一件第i种奖品!”

小Ho有点不能理解,道:“什么叫再选一件?”

“你想想,在你的状态转移方程(即问题求解公式)中是否满足这样两个公式?”小Hi问道。

小Ho低头想了想,点了点头表示赞同。

小Hi于是继续问道:“那你有没有意识到这样一个等式?”

“似乎……是的!”小Ho惊道:“这么说,其实best(i, x)的大部分计算都在best(i, x - need(i))中已经计算过了!”

小Hi问出了最后一个问题:“所以你的公式是不是就可以变成这样子呢?”

“是的!所以……代码就可以这么写了~是么!”

“是的嗯~”

输入

每个测试点(输入文件)有且仅有一组测试数据。

每组测试数据的第一行为两个正整数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
#define L 100050
#define N 505
int main(){ll dp[L],w[N],v[N];int n,m,i,j;scanf("%d%d",&n,&m);for(i=0;i<n;i++)scanf("%lld%lld",&w[i],&v[i]);for(i=0;i<n;i++)for(j=w[i];j<=m;j++)dp[j]=max(dp[j],dp[j-w[i]]+v[i]);printf("%lld\n",dp[m]);return 0;
}

hiho一下 第七周 Hihocoder #1043 : 完全背包相关推荐

  1. hiho一下 第六周 Hihocoder #1038 : 01背包

    题目1 : 01背包 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说上一周的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时 ...

  2. hiho一下 第五周 Hihocoder #1037 : 数字三角形

    #1037 : 数字三角形 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋彼岸 ...

  3. 学习进度条--第七周

      第七周 所花时间(包括上课时间) 10小时(包括上课2小时) 代码量(行) 152 博客量(篇) 2篇(包括团队博客) 了解到的知识点 对组内开发的软件进行讨论,先划分在实施进行更容易进行合作开发 ...

  4. 2014025687《嵌入式系统程序设计》第七周学习总结

    学号2014025687(29) <嵌入式程序设计>第七周学习总结 教材学习内容总结 8.2.5 有名管道FIFO 也叫FIFO(先进先出) 与无名管道的区别:它可以使互不相关的两个进程实 ...

  5. 20155319 2016-2017-2 《Java程序设计》第七周学习总结

    20155319 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十二章 Lambda 如果使用JDK8的话,可以使用Lambda特性去除重复的信息. 在只 ...

  6. 2019年春季学期第七周作业

    A Q 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 2019春第七周作业 我在这个课程的目标是 尽可能了解并且应用指针及文件和数组的知识 这个作业在那个具体方面帮助我实现目标 大致掌 ...

  7. 七周七并发之线程与锁

    2019独角兽企业重金招聘Python工程师标准>>> 七周七并发之线程与锁 博客分类: java 1.概述 1.1并发还是并行(Concurrent or Parallel) A ...

  8. 20159208 《网络攻防实践》第七周学习总结

    20159208 <网络攻防实践>第七周学习总结 教材学习内容总结 20159208 <网络攻防实践>第七周学习总结 教材学习内容总结 本周主要学习了教材的第七章:Window ...

  9. 20172301 《程序设计与数据结构》第七周学习总结

    20172301 <程序设计与数据结构>第七周学习总结 教材学习内容总结 二叉查找树是一种含有附加属性的二叉树,其左孩子小于父结点,父结点小于或者等于右孩子. 用链表实现二叉查找树 add ...

最新文章

  1. R语言ggplot2可视化并添加特定区间的回归线、R原生plot函数可视化并添加特定区间的回归线:Add Regression Line Between Certain Limits
  2. HMM中文分词分析 知乎
  3. .NET Framework 4.7 安装
  4. golang beego orm mysql sqlite3 postgresql 模型字段 数据库类型 对应关系
  5. Spring Security——基于读写锁的动态权限配置FilterInvocationSecurityMetadataSource实现类
  6. wxWidgets:wxGrid概览
  7. cpu核心数的线程数
  8. 剑指OFFER之二进制中1的个数(九度OJ1513)
  9. Maven 本地仓库访问私服
  10. 这个深度学习Model Zoo,真的有点像动物园? | 来自一只新加坡蓝精灵
  11. 力扣-62 不同路径
  12. uploadify3.1 php,Jquery上传插件 uploadify v3.1使用说明_jquery
  13. 按住滑块 拖拽验证html5,【原生】JavaScript 实现滑动拖动验证
  14. 基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制
  15. win10易升_电脑win7系统免费自动升级至win10系统,获得持续软件和安全更新
  16. BAT批处理提取文件内容替换指定文件内容
  17. Android 高仿微信6.0主界面 带你玩转切换图标变色
  18. 共享充电宝:涨价、上市、合并,“剩”者该如何破局?
  19. UNI-APP 开发微信公众号(H5)JSSDK的使用、微信扫一扫
  20. 音箱选购必备20秘诀

热门文章

  1. 实录 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新
  2. 深度学习工具那么多,究竟哪款最适合你?| 线下沙龙 × 报名
  3. 用好这几款炼丹利器,调参从此得心应手 | Let's Fork
  4. 开源代码上新!6 份最新「Paper + Code」 | PaperDaily #17
  5. 丑憨批的爬虫笔记5信息标记与提取
  6. 【Linux环境】阿里云CPU使用率 100% ECS 同时连接数峰值 25k+ 问题排查无果(附阿里云重新初始化云盘详细步骤)
  7. SpringBoot-data-MongoDB 报错Please use ‘MongoMappingContext#setAutoIndexCreation(boolean)‘
  8. 第一阶段:Java基础之数组
  9. Spring Boot-自动配置之底层原理
  10. Spring原始注解开发-02