博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程之美 第1章 游戏之乐——游戏中碰到的题目(四)
阅读量:6262 次
发布时间:2019-06-22

本文共 616 字,大约阅读时间需要 2 分钟。

1.6 饮料供货

题意:有若干种饮料,给出每种饮料的ID、单位容量(为2的方幂)、总数量和满意度。给定总容量限额,求最大满意度的购买方法。

看了解法一的讨论,本人直接想到的就是记忆化的DFS,但是解法一给出的是动态规划的解法,计算所有子状态,反推出解。这种解法的缺点很明显,有些状态可能根本不可能到达,浪费了资源,另外笔者个人觉得此法看起来不如DFS直观,还要做边界预处理。

解法二是一种常用的搜索方法,在搜索的同时记录已经计算过的状态还能提高效率,代码也是直观明了。

实际上本题目应该是为解法三设计的,我们在解这个问题的时候没有注意到饮料单位容量为2的方幂,利用这个条件,贪心的方法就足够了。但是,笔者还是喜欢用记忆化DFS,因为贪心法的代码写起来并不见得简单。

记忆化DFS和动态规划在处理饮料的时候都是按饮料种类一个一个来,处理完一种的所有情况继续下一种,而这里贪心法则是按照容量展开的,需要相当一部分管理代码。

这种差异是因为,一个种类的饮料具有相同的容量和满意度,属性统一,而一种容量却可能有多种种类,属性就繁杂化了。

在程序设计中,最好是把有共性的元素放在一起,因为在逻辑上,它们是一个类别的,是可以线性化排列的;将具有不同属性的元素放在一起,则可能需要对属性分类,人为增加了处理维度。

转载于:https://www.cnblogs.com/xcoder/archive/2012/10/18/2729863.html

你可能感兴趣的文章
Android的复选框的详细开发案例分析
查看>>
iOS FMDB数据库之增删改查使用
查看>>
EventBus源码解析
查看>>
Android中绘制简单几何图形和路径Path
查看>>
Internationalization(i18n) support in SAP CRM,UI5 and Hybris
查看>>
Xcode Debug调试汇总
查看>>
设计模式:再严谨的单例也尽量不要使用
查看>>
TiDB at 丰巢:尝鲜分布式数据库
查看>>
三篇文章了解 TiDB 技术内幕 —— 谈调度
查看>>
Next.js踩坑入门系列(六) —— 再次重构目录
查看>>
1. Context - React跨组件访问数据的利器
查看>>
Git常用操作、提交到GitHub等
查看>>
Android基础 四大组件之广播(Broadcast)
查看>>
SQL优化器原理 - 查询优化器综述
查看>>
TODO list小工具,给自己一个交代
查看>>
iOS Notification 与多线程
查看>>
NLP系列学习:概率图模型简述
查看>>
数组分页,返回数据,你用过吗?
查看>>
JEESZ-kafka消息服务平台实现
查看>>
(四)构建dubbo分布式平台-maven代码结构
查看>>