Noip 部分贪心题思路

这可是一道声名远扬的经典例题,其贪心思想应用广泛,但出题人编的这剧情真是毁了这道好题。。

本题像大多数贪心题目一样,很容易得高分,但拿满分非常难。此外,这题数据比较水,犯几个致命的错误也扣不了很多分……

 

我首先想到的办法是按右手排序。考虑最后一个位置,一定是右手最大的得到金币最少,于是解决掉最后一个人,倒数第二个人就到了最后一个位置,如此循环……结果得了70分,比标准答案大不少。看了题解之后,只改了一下排序的方式就AC了——最容易想到的办法离正解只有一步之遥!

 

标算比较难理解:

首先想最简单的情况,只有两个大臣的时候,要么第一个站前面,要么第二个站前面,比较最大值即可

 

左手

右手

金币

方案1

L

 

 

 

 

 L[1]

R[1]  

 

L/R[1]

L[2]

R[2]

LL[1]/R[2]  

方案2

L

R

 

L[2]

R[2]

L/R[2]  

L[1]

R[1]

LL[2]/R[1]  

比较上述四个结果,很明显 LL[2]/R[1] > L/R[1] ,LL[1]/R[2] > L/R[2] ,所以只需要比较两种方案中排在最后的大臣获得的金币,如果LL[2]/R[1] >LL[1]/R[2] (即L[2]R[2]>L[1]R[1])就用方案1——LR小的大臣站在前面。这不禁让我们猜想,任何情况下都是左右手乘积小的排在前面最优吗?

于是我们把这个最简单的求解过程做个合理的外推来证明一下。现在有两个数列{Ln}和{Rn},首项L[1]与R[1]是国王,其中两位大臣A、B分别是L[A],R[A]和L[B],R[B](A,B∈(0,n],A<B),设K为{Ln}前A-1项的积∏1≤i<A(L[i])、P为第A+1项到第B-1项的积∏A<i<B(L[i])。我们可以得到大臣A获得的金币是K/R[A],大臣B获得的金币是KL[A]P/R[B]。然后将两位大臣交换位置,得到大臣A、B的金币分别是KL[B]P/R[A]和K/R[B],做商比较KL[B]P/R[A]与KL[A]P/R[B]的大小,发现依然是左右手乘积小的大臣站在前面更优。

 

 

[NOIP1999] 旅行家的预算

 

 贪心思想:
首先预处理判断两个加油站的距离是否有可能在当前油箱容量上限下驶过,如果不能输出-1否则一定可以到达进行下面的计算
在满油箱能抵达的加油站中查找(从近到远)
如果有油价更便宜的,那么显然当前的油只要能到那里就可以了(油足直接开过去不足加到恰好过去为止)
如果没有,那么加满油开到下一个加油站(可以证明一定是最优的)
然后到最后一个加油站单独判断一次,最后输出总开销

 

[NOIP2011] 观光公交

贪心算法,肯定把氮气放在人多的时候用,首先我们可以得到这样一个性质,即氮气的使用满足最优子结构。无论有几个氮气加速器,第一个的使用都是一样的,所以我们可以对每个加速器进行单独分析,即可采用贪心策略。那么该如何贪心呢?显然,应该讲氮气使用在公交车上面人数较多的时刻上面。那么这个加速器会对多少人造成影响呢?

公交车到一个站之后,可能需要等人,也可能不需要等人,直接开往下一站。那么如果公交车等人了,那么使用氮气加速后也没有效果,所以加速器的作用区间为从使用的那一站开始一直到某一站公交车需要等人为止,这个区间内的所有旅客都可以受益,所以一个氮气加速器的作用应该是这一段区间的和。

 

[NOIP2013]火柴排队

(1)设序列只有两个数分别是a,b;c,d;且c < d,a < b

令S1=(a-c)(a-d)+(b-d)(b-d),S2=(a-d)(a-d)+(c-b)(c-b),则:

S1-S2=2ad+2bc-2ac-2bd=2a(d-c)+2b(c-d)=2(d-c)(a-b)。由已知条件易知S1 < S2。

   (2)由数学归纳法可以知道假设k个都是按序拍距离最小,第K+1项也一定是满足这样的顺序才能保证最小。

   移动的时候可以将一个火柴序列不同,只移动另外一个序列。于是可以构造一个数组f,f[i]表示第i个数应该移动到f[i]位置。于是问题转换成对f[i]数组排序,每次可以交换相邻两个数,问最少需要移动多少次的问题了,也就是求这个序列的逆序和问题。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值