P1080 [NOIP2012 提高组] 国王游戏题解

题目描述:

恰逢 H 国国庆,国王邀请 nnn 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 nnn 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。

大致思路:

妥妥的贪心题,我们把所有人的左手存进 aaa 数组,把所有人的左手存进 bbb 数组,因为直接看整体,很难做,那么我们可以从两个人中找出规律,再依次循环下去。现在有两个人,它们的下标分别为 xxxyyy,那么接下来就可以进行分类讨论:

  • 把下标为 xxx 的人放在前面,把下标为 yyy 的人放在后面。

  • 把下标为 yyy 的人放在前面,把下标为 xxx 的人放在后面。

接着,把前面人左手的乘积看做 sss

  • 对于把下标为 xxx 的人放在前面,把下标为 yyy 的人放在后面,这种可能 x,yx,yx,y 的收益分别为 s÷bxs ÷ b_xs÷bxs×ax÷bys × a_x ÷ b_ys×ax÷by

  • 对于把下标为 yyy 的人放在前面,把下标为 xxx 的人放在后面,这种可能 y,xy,xy,x 的收益分别为 s÷bys ÷ b_ys÷bys×ay÷bxs × a_y ÷ b_xs×ay÷bx

对于 xxxyyy 之前的人来说不影响他们的钱数,对于 xxxyyy 后面的人来说也不影响他们的钱数,所以我们只要考虑 max⁡(s÷bx,s×ax÷by)\max(s ÷ b_x,s × a_x ÷ b_y)max(s÷

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值