田忌赛马

题目描述:

中国古代的历史故事“田忌赛马”是为大家所熟知的。话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢取最多的钱? N<=1000

 

解题过程:

首先直觉是贪心,想到3个贪心策略:

 


 

策略A:

田忌每次用最烂的马去和齐王最屌的马pk。(尽可能消耗齐王的强马)

反例是显然的,比如

田忌:1 2  3 4 4 5

齐王:3  4 4 4 6 7

按照此策略 出场顺序是 (1,7)(2,6)(3,4)(4,4)(4,4)(5,3)3败2平1胜;

而如果(1,7)(2,6)(3,4)(4,4)(4,3)(5,4)可以做到 3败1平2胜;

 

因此策略A失败。 

 


 

策略B:

田忌每次都用最强的马去找齐王的马中最强的且能打的过的,和它pk。

疑问:如果田忌有一匹马可以和齐王的一匹马打平手,也可以干掉齐王的另外一匹马,那么应该干掉那匹马,还是打平手呢?比如田忌有一匹马能力是 5,齐王剩余的马的能力分别是5,3,2,那么应该去打5还是打3呢?

(个人感觉如果所有马的能力值都不相同的情况下,这个贪心策略是可以的。。)

 

如果有相同的情况,可以得到下面的反例:

田忌 : 5  8   9

齐王 : 6  7   9

如果能打平手就打平手,那么结果是1胜1平1败;

而实际上可以(9,7)(8,6) (5,9),2胜1败;

 

如果能打平手但不打:有下面的反例:

田忌: 6 10 11 

齐王: 7 11 12

 

如果能打平手但不打,那么(11,7)(10,11) (6,12),1胜2败;

而实际上可以(11,11)(10,7)(6,12) 1胜1平1败;

 

因此策略B失败。 

 


 

策略C:

田忌每次用自己最弱的马,去齐王那里挑一匹能打赢的且能力最大的马打掉,如果都不能打,就和齐王最牛的马去打。

(个人感觉如果所有马的能力值都不相同的情况下,这个贪心策略也是可以的。。)

反例也是可以找到的。。

 


 

dp正解:

可以当做齐王是按从强到弱的顺序来出马的。把田忌的马从小到大排序存在数组A,齐王从大到小存在数组B。

那么对于齐王的一匹马,田忌有两个选择,要么选自己最强的马和他打,要么选自己最弱的马和它打。

所以 F[i][j](j<=i)表示前i次决斗,田忌出了j次最弱的马的最优解。

那么F[i][j]=max{ F[i][j-1] + pk(A[j],B[i])  ,   F[i-1][j] + pk(A[n-(i-j)+1] , B[i] ) };

 

 

转载于:https://www.cnblogs.com/vb4896/p/3975656.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值