HDU 1052 田忌賽馬 貪心

2022-05-09 19:30:04 字數 1082 閱讀 9215

題意是田忌賽馬的背景,雙方各有n匹馬,下面兩行分別是田忌和齊王每匹馬的速度,要求輸出田忌最大的淨勝場數*每場的賭金200。

開始的時候想對雙方的馬匹速度排序,然後比較最快的馬,能勝則勝,否則用最慢的馬去消耗對方,但這樣存在問題:1 2 3 對 1 3 3的時候,會變成1 - 3,2 - 3,3 - 1,淨勝-1場,而實際存在1 - 3,2 - 1,3 - 3的淨勝0場的策略;

然後自然想到的是要對平局進行特殊處理,當雙方最快的馬能戰平時,比較最慢馬,如果最慢馬能勝對方,就用最慢馬勝對方,然後讓兩方最快馬戰平,但是:2 3 5 對 1 4 5的時候,會變成 2 - 1,3 - 4,5 - 5,淨勝0場,而實際存在2 - 1,3 - 5,5 - 4的淨勝1場的策略;

以雙方最慢的馬比較,若田忌最慢的馬比齊王最慢的馬快,則本場用雙方最慢的馬比賽;若田忌最慢的馬比齊王最慢的馬慢,則本場用田忌最慢的馬和齊王最快的馬比賽;若兩方最慢的馬速度一樣,則比較兩方最快的馬;若田忌最快的馬快於齊王最快的馬,本場用雙方最快的馬比賽,(若田忌最快的馬和齊王最快的馬一樣快,暫不處理,保留;若田忌最快的馬比齊王最快的馬慢,則用田忌最慢的馬去消耗齊王最快的馬。)這裡只比較田忌最慢的馬和齊王最快的馬即可。

1 #include 2 #include 3

using

namespace

std;

4int

main()524

else

if(a[paslow] < b[pbslow]) //

當前田忌慢馬慢於齊王慢馬,選擇與齊王快馬比

2530

else

//當前田忌慢馬與齊王慢馬一樣

3138

else

if(a[paslow] < b[pbfast]) //

當前田忌慢馬慢於齊王快馬,選擇與齊王快馬比

3944}45

}46 printf("

%d\n

",ans*200

);47}48

return0;

49 }

view code

個人覺得非常漂亮的分析:

(希望以後也能寫出如此漂亮的分析...)

hdu1052 田忌賽馬 貪心

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

hdu 1052 田忌賽馬

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

HDU 1052 田忌賽馬

hdu 貪心 貪心專題 田忌賽馬 不知道上網搜一下回來 每次輸入乙個n代表馬匹數,下一行輸出田忌每一匹馬的數值,然後是王的馬匹數值。田忌贏一局得200,輸一局扣200,求田忌最多能賺多少。sample input 3 92 83 71 95 87 74 220 20 20 20 220 19 22 ...