Java算法

snow126 2019-04-09 09:00:32
e.g. Say you had a voucher for $100 and the items in
the shop were worth: $87, $20, $99, $12, then the most you could spend would be the full
$100 (just buy 5 of the $20 item) so there would be zero waste, whereas, if the items in
the shop were worth: $87, $22, $30, $45 then the most you could spend would be $97

意思大概是
代金券不找零,怎样才能最大化使用代金券。例如: 你有一张100元的代金券,商店里的物品价值:87元,20元,99元,12元,则最优方法是:(买5个价值20元的物品)。
如果商店里的物品价值:87元,22元,30元,45元,则最优方法是:(买22+30+45 = 97)。

请问各路大神有什么想法
...全文
210 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
snow126 2019-04-12
  • 打赏
  • 举报
回复
我的理解是,这道题目要求返回一个最小的waste,当满足waste等于0的时候,无论是5个20还是20+20+30+30都能使waste为0,这时候其实无所谓是哪种情况导致的waste为0。
wdonghai 2019-04-12
  • 打赏
  • 举报
回复
这题我觉得应该要用回溯算法来解答,因为如果能刚好凑够的话,答案不一定只有一个的,
比如目标值时100,里面有20,30这两个值的话,答案会有5个20,20+20+30+30,
当凑不够的时候还要考虑最接近目标值的算法。
snow126 2019-04-12
  • 打赏
  • 举报
回复
前面的一个帖子2016年的现在才结帖,所以这次结的快点,哈哈
wdonghai 2019-04-11
  • 打赏
  • 举报
回复
这帖子也结得太快了点。
snow126 2019-04-11
  • 打赏
  • 举报
回复
这题使用动态规划,只是不太熟悉动态规划,还要去学习
十八道胡同 2019-04-10
  • 打赏
  • 举报
回复
简单想法,做一个N位数的数组array[N],N就等于物品个数,array数组每个代表购买对应物品的个数
array每位都有个最大值,比如第一位,是87元,那么他的最大值就是100/87,取小于这个数的最大整数
然后从array数组从0001开始,一直轮询到array可能的最大值,保存中间最优方法即可。

轮询时,发现金额超过100,就跳过
imiMi_ 2019-04-10
  • 打赏
  • 举报
回复
物品不限量,套用动态规划的完全背包,只是需要优化一下记录背包装法可解决。

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧