poj 1456 贪婪方法的证明
来源:互联网 发布:cf域名 编辑:程序博客网 时间:2024/05/22 14:24
题目描述
输入:n个物品,它们的价值和它们的dead line,就是在deadline之后不能再卖掉它。而且单位时间只能卖一件物品。
输出:最多获利多少。
例如
输入:4 50 2 10 1 20 2 30 1
输出:80
在第一段时间卖掉最后一个,获得30,然后在第二段时间之前卖掉第一个,获利50,共课获利80.
详情请见file:///F:/problems_2/1456%20--%20Supermarket.mht
贪婪方法的证明
做这道题之后,仔细想想思路。因为写程序的时候发现有很多的逻辑判断,而这些判断写错一个,结果就是错的,用什么来指导自己才能让自己程序的逻辑不出错呢?只能是深入的理解了这个方法,尽可能的抽象。
假设所有物品的deadline最大为t,在每一个时间段卖的物品为N1,N2,…,Nt.在每一时间段可以选择的物品的集合是I1,I2,…It.在每一段时间段i和该时间段之前的决策的集合是D1,D2,…,Dt.显然集合I1,I2,…It满足I1包含I2,I2包含I3,…
思路如下
从时间t到时间1的时间i中,在Ii中找到最优的Ni(其中Ii去除了从i到t选择的物品),同时将物品Ni从集合Ii中去除。
证明:用数学归纳法。也就证明若Di+1是最优的,在Di+1中取得的物体是{Ni+1,Ni+2,…,Nt},在Ii中取最大的Ni和Di+1组成集合Di,则Di也是最优的。
反证,若Di不是最优的,最优的是{Mi,Mi+1,…,Mt}.因为Di+1是最优的,
1) 若Mi不是Ni+1,…,Nt中的一个,那么Mi<=Ni,则{Mi,Mi+1,…,Mt}不是最优的。得证。
2) 若Mi是Ni+1,…,Nt中的一个,那么用Mi替换该物品,直道Mi不是Ni+1,…,Nt中的一个,那么有上一步的证明可知{Mi,Mi+1,…,Mt}不是最优的。得证。
代码
- poj 1456 贪婪方法的证明
- 人民币找零的贪婪算法最有解的证明
- POJ 1009的证明
- 递归的证明方法
- 贪婪方法——贪婪方法和动态规划的比较:背包问题
- POJ 2975 Nim (Nim的证明)
- 证明synchronized同步的方法是可重入的
- 贪婪方法——单源最短路径的Dijkstra算法
- 证明集合可数的简便方法
- 用组合数学的方法证明相似
- 用几何画板证明勾股定理的方法
- Unit 1-Lecture 2:证明的方法
- 利用推广的方法证明NP-完全性
- 利用推广的方法证明NP-完全性
- 正则表达式的贪婪与非贪婪
- 正则表达式的贪婪与非贪婪
- 正则的贪婪与非贪婪模式
- 欧拉函数的证明以及应用(附POJ例题)
- QDir对某个目录内文件名进行模糊搜索
- 绘制余弦曲线
- ArrayList
- 线程池
- MySQL导出导入命令的用例(转)
- poj 1456 贪婪方法的证明
- 一个夭折 脱裤子放屁的QSql Sqlite操作类
- Delphi7 调用C# .Net 2.0 webService 执行数据更新功能的说明
- 学习日志—API
- 如何解决Oracle“不能创建唯一索引,发现重复记录”问题
- Unix哲学
- Jquery教程
- Spring 连接数据库出错
- SQL标识列重新排序