例1:你的王国里有一条n个头的恶龙,你希望雇佣一些骑士把.pptVIP

例1:你的王国里有一条n个头的恶龙,你希望雇佣一些骑士把.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例1:你的王国里有一条n个头的恶龙,你希望雇佣一些骑士把.ppt

例1:你的王国里有一条n个头的恶龙,你希望雇佣一些骑士把它杀死(也就是砍掉所有的头)。村里有m个骑士可以雇佣,一个能力值为 x 的骑士可以砍掉恶龙一个直径不超过 x 的头,且需要支付 x 个金币。如何雇佣骑士才能砍掉恶龙所有的头,并且支付最小的金币?注意,一个骑士只能砍一个头并且仅能被雇佣1次 输入第一行两个数n,m,后面n行,每行表示每个龙头的直径,在后面m行,每行表示一个骑士的能力值。   分析:要使总费用最少,即雇佣骑士的能力值最少,则想到把龙和骑士都从小到大排序,依次去砍,如果能砍掉,则雇佣,不能则选择下一个骑士,直到砍完所有龙头,砍不完则无解。 例2:你有 n 个部下,每个部下需要完成一个任务。第 i 个部下需要你花 Bi 分钟交待任务,然后他会立刻独立地、无间断地执行 Ji 分钟后完成任务。你需要选择交待任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任务尽早结束)。注意,不能同时给两个部下交待任务,但部下们可以同时执行他们各自的任务。 输入第一行为一个数N,后面N行,每行两个数B,J 分析:要更早的完成所有任务,我们可以贪心,将执行时间越长的任务越早交代,这样就能更早的执行。 例3:圆桌旁坐着 n 个人,每个人都有一定数量的金币,金币总数能够被 n 整除。每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等。你的任务是求出被转手的金币数量的最小值,比如 n = 4, 且 4 个人的金币数量分别为 1, 2, 5, 4 时,只需要转移 4 枚金币(第 3 个人给第 2 个人两枚,第 2 个人和第 4 个人分别给第 1 个人1 枚金币)即可实现每个人手中的金币数目相等。 输入第一行一个数N,后面N行每行一个数Ai,表示每个人的金币数。 分析:我们是可以求出最终没人手中的金币数=总金币数除以N,设为M。 要使转手的金币最少,则需先求出每个人转手的金币,求其和的最小值,我们用xi表示第i个人给i-1个人的金币数。由于是环形,x1表示1号给N号的金币数。注意xi可能为负,则表示i-1号给i号|xi|金币。 则有以下方程: A1-x1+x2=M A2-x2+x3=M A3-x3+x4=M …… An-xn+x1=M 以上N个方程,解方程得解?可惜最后一个方程是多余的。 A1-x1+x2=M = x2=x1-(A1-M) = x2=x1-C1 A2-x2+x3=M = x3=x1-(A1+A2-2M) = x2=x1-C2 A3-x3+x4=M = x3=x1-(A1+A2+A3-3M) = x2=x1-C3 …… An-xn+x1=M = A1+A2+A3+……+An=N*M 所以我们用x1表示出x2——x(n-1),则我们的任务是求 |x1|+|x1-c1|+|x1-c2|+……+|x1-c(n-1)|的最小值。 注意上面式子中的每一项其实是表示数轴上n个点到x1的距离之和,则我们的问题变为给出数轴上N个点,找出到这些点的距离之和最小的点 中位数:排序后中间的那个数 本题要确定x1的位置,使得x1到其他N个点距离之和最小,显然,当N为奇数时,x1一定与排序后中间的那个点重合,N为偶数则x1可以是中间两个点之间的任意位置。所以x1为这N个数的中位数。 例4:在一个周长为 10000 的圆上等距分布着 n 个雕塑。现在又有 m 个新雕塑加入(位置可以随意摆放),希望所有 n + m 个雕塑能在圆周上均匀分布。这就需要移动一些原有的雕塑。要求 n 个雕塑移动的总距离最小。 输入仅一行,包含两个数n,m 分析:因为移动前后雕塑都是均匀分布,所以我们可以先把某一个雕塑当做原点固定不动,并将这个墓碑的距离设置为0。 之后利用等比缩放,将整个圆缩放成一个周长为 n + m 的圆,于是原有的雕塑的位置可以利用公式得出: 加入m个雕塑后,肯每个雕塑都位于圆的整数点上,则我们将原来n个雕塑移动到离它最近的整数点上的距离和就是移动的最小距离。 当然最后的答案要乘以10000/(n+m) 例5、一根长度为 L 厘米的木棍上有 n 只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为 1 厘米/秒。当两只蚂蚁相撞时,二者同时调头(掉头用的时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算 T 秒之后每只蚂蚁的位置。 分析:由于掉头用的时间可以忽略不计,所以可以直接看做两只蚂蚁对穿而过。于是可以直接把坐标按照方向进行加 / 减的处理。得到所有蚂蚁的最终坐标,但是我们并不知道这些坐标对应哪只蚂蚁。 把棍子拉为无限长,然后通过模拟这个过程可以发现,蚂蚁的顺序是绝对的,最左边的蚂蚁绝不可能爬到其他蚂蚁的右边去。所以将最终坐标从小到大排序后对应初始状态下得每只蚂蚁。当然,如果最终蚂蚁的位置坐标小于 0 或者大于 L 那么就直接判断为Fell

文档评论(0)

lnainai_sj + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档