买书问题:
上柜的《哈利波特》平装本系列,一共有五卷。假设每一卷单独销售均需8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:
本数 2 折扣 5%
本数 3 折扣 10%
本数 4 折扣 20%
本数 5 折扣 25%
问题:设计出算法,能够计算出读者所购买的一批书的最低价格。
........
发现没有,你和上面进行对比,同样是可以转化的。
所以说无论是Y4=Y5,还是Y4>Y5,都是满足的。
这样我们就可以证明了方案一是最好的。
也就是说我们在进行扣除的时候,无论我们准备要扣除四个,三个,还是两个,紧着数目多的书进行扣除就一定能找到最优解。
下面给出书中的伪代码:
F(Y1,Y2,Y3,Y4,Y5)
= 0 if (Y1=Y2=Y3=Y4=Y5=0)
= min
{
5*8*(1-0.25)+F(Y1-1,Y2-1,Y3-1,Y4-1,Y5-1), if (Y5>=1)
4*8*(1-0.20)+F(Y1-1,Y2-1,Y3-1,Y4-1,Y5), if (Y4>=1)
3*8*(1-0.10)+F(Y1-1,Y2-1,Y3-1,Y4,Y5), if (Y3>=1)
2*8*(1-0.05)+F(Y1-1,Y2-1,Y3,Y4,Y5), if (Y2>=1)
8+F(Y1-1,Y2,Y3,Y4,Y5), if (Y1>=1)
}
注意一点:我们每次进行扣除后,都要对剩下的书再次进行从大到小的排序。
例:
F(1,2,2,2,1)
= min{
5*8*(1-0.25)+F(0,1,1,1,0),
4*8*(1-0.20)+F(0,1,1,1,1),
3*8*(1-0.10)+F(0,1,1,2,1),
2*8*(1-0.05)+F(0,1,2,2,1),
8+F(0,2,2,2,1),
}
注意下面这一步就是再次进行从大到小的排序
= min{
5*8*(1-0.25)+F(1,1,1,0,0),
4*8*(1-0.20)+F(1,1,1,1,0),
3*8*(1-0.10)+F(2,1,1,1,0),
2*8*(1-0.05)+F(2,2,1,1,0),
8+F(2,2,2,1,0),
}
再解释下这个代码的过程,它其实就是一个穷举的过程,采用递归的方式,不过每次递归的时候都采用当前来说最好的扣除方案,不过具体扣除几个它都进行了穷举,最后把穷举的结果比较,看那个花费的少就返回哪个值,其实这个和上一个问题的烙饼的那个问题有点像。
代码就不贴了,网上很多,时间太紧了,我要赶紧去学机器学习了。
文章浏览阅读2.4w次,点赞6次,收藏18次。系统:Manjaro 20.0.3桌面:Gnome安装软件时出现错误:无法从 mirrors.ustc.edu.cn : Operation timed out after 10001 milliseconds with 0 out of 0 bytes received 获取文件 'archlinuxcn.db'错误:无法升级 archlinuxcn (下载数据库出错)错误:无法从 lonewolf-builder.duckdns.org : Recv failure: 连接被对方重设 获取._archlinuxcn.db下载失败
文章浏览阅读2.9k次,点赞4次,收藏35次。源/头条 文 /程序员界的彭于晏面试时7分靠能力,3分靠技能,而刚开始时的介绍项目又是技能中的重中之重,决定一次面试的成败,那么面试时如果要介绍自己的项目该..._技术面如何将自己做的项目
文章浏览阅读3.7w次,点赞16次,收藏100次。git生成ssh密钥详细步骤 git如何生成ssh密钥_gitssh密钥生成
文章浏览阅读687次。目前苹果基本暂停了新号注册,但今天开始市场会流入大量欧洲国家残留下的号到中国!全是虚假资质注册,使用超不过一个月100%会封号,(群里之前曝光的俄罗斯人所为,目前已下榻深圳某酒店甩卖)!苹果目前严厉查封虚假资质账号,未满14天也会被封的可能,哪怕不买,也不能趁虚而入被坑!熬过了这段时间,以后自然会有新的资质没问题账号下来! 个人 公司账号 查的同时 又把矛头指向了 企业账号?就在刚刚,..._app store 频繁封号
文章浏览阅读127次。相机是 3D 可视化中的主要查看工具。它们被放置在世界上并以独特的方式命名。场景中可以存在多个摄像机,每个摄像机都连接到单独的视口(窗口)以向用户显示场景。相机可以查看固定目标,跟随路径,或直接由触觉设备控制(例如模拟内窥镜)。本章探讨使用摄像机并将其连接到窗口显示或视口的基本过程。世界内的摄像机指向场景。近剪裁平面和远剪裁平面定义摄像机渲染的区域。_chai3d示例
文章浏览阅读5k次,点赞8次,收藏36次。遇到一个需求,需要修改文件中的内容,查找资料发现如下工具类:原链接:点击打开链接/** * 修改文件内容 * * @param fileName * @param oldstr * @param newStr * @return */ private static boolean modifyFileContent(String fileName, String o..._java 修改文件
文章浏览阅读3.6k次,点赞132次,收藏98次。【哈士奇赠书活动 - 24期】-〖前端工程化:基于Vue.js 3.0的设计与实践〗_程沛权 博客
文章浏览阅读226次。Git克隆项目克隆项目代码git clone ssh地址若出现密钥问题The authenticity of host 'git.dev.tencent.com (118.25.166.124)' can't be established.RSA key fingerprint is SHA256:jok3FH7q5LJ6qvE7iPNehBgXRw51ErE77S0Dn+Vg/I..._rsa key fingerprint is sha256:jok3fh7q5lj6qve7ipnehbgxrw51ere77s0dn+vg/ik. a
文章浏览阅读3.4w次,点赞2次,收藏29次。前一阵研究强化学习,发现中文的资料非常少,实例就更少。于是翻译一篇q学习算法的教程,供需要的人学习。原文链接:http://mnemstudio.org/path-finding-q-learning-tutorial.htm正文:Q学习算法是一种用来解决马尔可夫决策过程中最优化问题的方法。Q学习算法最大的特点是它具有选择瞬时奖励和延迟奖励的能力。在每一步中,agent通过观察状态_强化学习教程
文章浏览阅读3.8k次。1 赛题描述在真实的社交网络中,存在的作弊用户会影响社交网络平台。在真实场景中,会受到多方面的约束,我们仅能获取到少部分的作弊样本和一部分正常用户样本,现需利用已有的少量带标签的样本,去挖掘大量未知样本中的剩余作弊样本。给定一段时间内的样本,其中包含少量作弊样本,部分正常样本以及标签未知的样本。参赛者应该利用这段时间内已有的数据,提出自己的解决方案,以预测标签未知的样本是否为作弊样本。数据处理方法和算法不限,但是参赛者需要综合考虑算法的效果和复杂度,从而构建合理的解决方案。2 题目思路基于给定的少_小样本赛题数据
文章浏览阅读278次。vuex的作用是用来状态共享的,state中定义数据,但如果需要对数据进行一定的处理,比如说state中有一个数组,但我们需要显示该数组中某些符合特定要求的值,而这些特定的数据需要在多个组件中shi'yong..._vuex调用字仓库方法
文章浏览阅读510次。List listWithDup = new ArrayList(); listWithDup.add(1); listWithDup.add(2); listWithDup.add(3); listWithDup.add(1); listWithDup.add(3); List listWithout_列表去重吗