一些背包题
HDU2546
本题的核心思想基于贪心+01背包,因为当卡内余额小于5时无法购买东西,为了让余额最小,总是会有卡内余额大于等于5块钱时的最大消费+价格最大的菜品这样一个贪心表达式,即开头先把最大值挑出来,然后在01背包的过程结束后减去这个最大值。
这里01背包的作用是确定m-5个单位余额最大可以买到多少价格单位的菜,所以容积上界应该设定为m-5。
UVA624
本题是一个01背包+记录路径的题目,因为需要记录路径,就需要额外添加一个记录路径用的数组。在最后可以通过这个数据进行回溯求解放入的物品。
二维DP数组与滚动数组不同的一点是,无法放入物品时也要继承dp[i-1][j]的结果,否则会出现断档的情况。
HDU2955
The aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually gets caught in the end, often because they become too greedy. He has decided to work in the lucrative business of bank robbery only for a short while, before retiring to a comfortable job at a university.
渴望成功的RR看了不少美国电影,了解到坏人经常在最后落入法网的原因是他们过于贪婪。他从决定从事抢劫到现在只有一小段时间,这是在他从大学的某个轻松的职位上退休后的想法。
For a few months now, Roy has been assessing the security of various banks and the amount of cash they hold. He wants to make a calculated risk, and grab as much money as possible.
近期几个月,R已经入侵了许多银行的安全系统得到了这些银行拥有的资金数目,他想计算出风险系数,并且还要得到尽可能多的钱。
His mother, Ola, has decided upon a tolerable probability of getting caught. She feels that he is safe enough if the banks he robs together give a probability less than this.
他母亲,O,已经定好了一个可容忍的被抓概率。如果抢一些银行的被抓总概率小于这个数,就认为这个行动是安全的。
首先这个题的与众不同之处是在于独立事件的概率的计算是乘法计算,与一般的加法背包不同,其次是这里两个数据中代表“容积”的变量是实数变量,实数是不能作下标的,如果用map也不知道循环的步长是多少,所以需要一些变动。
背包问题只能求解最大值(最小值就是什么也不装),按一般想法这里是求出在可容忍被抓概率下的最大钱数,因为上述原因这个方案是不可行的,所以换个思路,求解一定范围钱数下的最大不被抓概率。被抓和不被抓是对立事件,所以直接用1-p就能求出不被抓概率,然后利用背包求出0~所有银行钱数总和的最大不被抓概率,最后从大到小判断一下它们对应的最大不被抓概率与安全概率的关系,输出答案即可。
POJ2184
本题的难点在于负数处理上,因为最大和可能是一个负数与一个大正数的和,而两个数据维度都可能是那个负数,所以一般的模板不能够处理这个题目,使用map很可能会超时。
可以看到本题最大数据总和为[-100000,100000],这也就是说可以把区间总体移到[0,200000]间,这可以通过把零点设定为100000实现,小于1e5的就是负数,大于1e5的就是正数。
这样就可以利用数组存储了,但是还有一个问题:滚动数组优化后容积一般都是从大到小循环,但是这里出现了一个减负数的问题,这样就变成了优先访问大容积,所以对于这个问题可以通过从小到大循环来解决(可能直接把负数处理变成正数亦可)。
必须注意的是负数的边界上限为2e5+it[i],或者在初始化的时候多初始化一点,否则会出现j-it[i]>2e5,访问到未初始化部分的情况
原文地址:https://www.cnblogs.com/HardBass/p/11720096.html
- Centos7下yum安装配置nginx与php
- CentOS7安装MySQL
- 分布式系统唯一ID生成方案汇总
- 操作系统底层技术——CPU亲和性
- AngularJS例子 ng-repeat遍历输出 通过js的splice方法删除当前行
- mongoDB报错Cannot find module '../build/Release/bson'
- 计算机视觉处理三大任务:分类、定位和检测
- Windows下RabbitMQ安装及入门
- 计算机视觉任务:图像梯度和图像完成
- Yarn【label-based scheduling】实战总结(一)
- 配置sonarqube+maven
- Yarn【label-based scheduling】实战总结(二)
- HDFS学习:HDFS机架感知与副本放置策略
- spring cloud 报错Error creating bean with name 'hystrixCommandAspect' ,解决方案
- 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 数组属性和方法