HDU 1052 田忌賽馬

2021-09-01 04:27:08 字數 1302 閱讀 7902

hdu 貪心

貪心專題

田忌賽馬(不知道上網搜一下回來)

每次輸入乙個n代表馬匹數,下一行輸出田忌每一匹馬的數值,然後是王的馬匹數值。田忌贏一局得200,輸一局扣200,求田忌最多能賺多少。

sample input

3

92 83 71

95 87 74

220 20

20 20

220 19

22 18

0

sample output

200

00

這題首先想到的是貪心,問題是怎麼貪呢?假如田忌最好的馬比王最好的馬好,那就用田忌最好的馬和王最好的馬比(因為田忌這匹馬是穩贏的,當然要打倒最強的對手才能讓後面多贏)。如果田忌最好的馬比齊王的差,那就用最差的和齊王最好的比。如果田忌和齊王最好的一樣強?這時就比較最差的,若是田忌最差的比齊王的差,那就拿去和齊王最好的比;若是比齊王最差的強,那就和齊王最差的比(注意:這時候不應和齊王最強的比,因為這會導致本來可以是一勝一平的變成一勝一負)

31ms

#include

#include

using

namespace std;

intmain()

for(

int i=

0;i)int t1=

0,t2=n-

1,k1=

0,k2=n-1;

//t1、t2分別是田忌最差和最好的馬,k1、k2是齊王的。

int sum=0;

sort

(tian,tian+n)

;sort

(king,king+n)

;for

(int i=

0;i)//田忌最好的馬比不過給齊王最好的馬,用田忌最弱的和齊王比

else

if(tian[t2]

)//最好的馬一樣強

else

if(tian[t2]

==king[k2]

&&tian[t1]

)else

if(tian[t2]

==king[k2]

&&tian[t1]

>king[k1]

)else

if(tian[t2]

==king[k2]

&&tian[t1]

==king[k1])}

cout<}return0;

}

hdu 1052 田忌賽馬

注 看到一篇部落格證明得挺好的。僅僅為了留在存根 演算法可以用dp,或者給每匹馬連線賦權變為二分圖最佳匹配,還有就是貪心了。1.當田忌最慢的馬比齊王最慢的馬快,贏一場先 2.當田忌最慢的馬比齊王最慢的馬慢,和齊王最快的馬比,輸一場 3.當田忌最快的馬比齊王最快的馬快時,贏一場先。4.當田忌最快的馬比...

hdu 1052 田忌賽馬加強

背景 由於前些天做了貪心的題目就準備刷點貪心看看,不過由於會長告訴我要以集訓隊培訓為主,自學為輔,所以這周大概要集中精力看集訓隊的題了,都是杭電oj的,會先自己嘗試ac,實在不行再去看解題報告,受到會長大神鼓勵我一定要加油了 學習 其實這道題想了好久還是沒有考慮周到,都是看了discuss裡的資料才...

hdu1052 田忌賽馬 貪心

錯誤 include 田忌賽馬,錯誤版 include include 思路 用田忌最快的馬與齊王最快的馬比較,1.若能贏就贏 2.若贏不了,就用最差的馬拖齊王最好的馬入水 3.若打平 要判斷是否在最好一匹馬,若是,則打平,若不是,則用最差的一匹馬拖它下水,雖然輸了這次,但下次有機會贏回。看似無差別...