【笔记】贪心
时间:2021-07-16
本文章向大家介绍【笔记】贪心,主要包括【笔记】贪心使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
若干见到的题和思想
假设最优的结果的形式,然后“反悔”
感觉就是以这种方式添加条件(由于已经是答案,我们再做修改的话已经没有“后效性”,因为修改后可以直接当成答案,从而可以比较优劣),然后倒推出实际上最优的结果形式
例题 [USACO12FEB]Cow Coupons G
思路:我们先以 C 排序,然后假设最优答案形式就是其中随意的若干项。接着考察有无更优策略时我们发现,对于一个用了券的物品,如果其前面存在一个买都没买的物品,那么显然不买当前物品而用这个券去买前面那个,这个新的答案会更优(物品个数不变,还多了一些钱);于是就“反悔”去买了前面未买物品中 c 最小的那个
那么经过有限次这种“反悔”,答案的形式就变成了:前面连续一段都被买,且 K 张券都用在这里了,然后后面断断续续地不用券买了一些。
于是我们推出了答案的(一种可能可做的)形式。在此题中,我们只需要扫一遍得到购买每个长度的前缀连续段对应的最小花费(用堆做),以及对应的剩余钱在后半段最多能买多少物品(由于此时都不用券,我们只需要再用一个堆维护,随着预算的缩减和指针的后移不断弹出已经不属于当前区间的和若干最贵的物品,直到在预算内就行了(有一个小证明:由于贵而被弹出了的物品,不可能因为之后有一个因为不在区间而被弹出的物品而重新回到堆中);另外,此题对于此处又用一个数组维护了“是否在堆内”的信息,并用一个单独的变量记录堆此时的大小,这用来解决需要弹出堆内指定元素的问题)
原文地址:https://www.cnblogs.com/zhyh/p/15021390.html
- MVC解决Json DataGrid返回的日期格式是/Date(20130450000365)
- Easyui 让DataGrid适应浏览器宽度
- Easyui 让Window弹出居中与最大化后居中
- WCF技术剖析之十六:数据契约的等效性和版本控制
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(13)-系统日志和异常的处理③
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②
- Enterprise Library Policy Injection Application Block 之二: PIAB设计和实现原理
- 育碧与研究所共同开发的AI,是什么样的?
- 大家都在关注AI,但这些事你可能并不知道!
- AI—未来医疗
- 微信小程序新功能上线 一键连Wi-Fi手机变门禁卡
- 使用xUnit为.net core程序进行单元测试(中)
- Asp.Net 用Jquery和一般处理程序实现无刷新上传大文件
- WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用
- 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 数组属性和方法