背景:
由於前些天做了貪心的題目就準備刷點貪心看看,不過由於會長告訴我要以集訓隊培訓為主,自學為輔,所以這周大概要集中精力看集訓隊的題了,都是杭電oj的,會先自己嘗試ac,實在不行再去看解題報告,受到會長大神鼓勵我一定要加油了
學習:其實這道題想了好久還是沒有考慮周到,都是看了discuss裡的資料才開始考慮特殊情況的,這道題是把貪心的思想用到了極致啊,太經典,太開心!
1.思路:把兩個人的馬按降序排序,(由於開始手寫10分鐘的快排超時了,就用了c++的sort,沒想到忘了在引數列表新增乙個cmp,除錯半天,下次注意了!)然後主要核心是當田忌的最快馬和國王的最快馬相等時要不要直接打平的判斷(我在這裡有乙個思維懶惰現象不管三七廿一直接比,導致考慮不周到,不能再這樣了,這叫因小失去大。)這時應該看最慢馬,若田忌的最慢馬小於或等於國王的應該最慢馬,反正它都是要輸的就讓它和國王的最快馬比吧,若田忌的最慢馬大於國王的最慢馬則這兩最慢馬直接相比,因為國王的最慢馬和誰比都會輸,就拿田忌的最慢馬來和它比吧,然後再迴圈繼續判斷最慢馬。
2.充分理解了貪心思想,每一步都要貪,且要考慮所有情況。
#include#includeusing namespace std;
int cmp(const int &a,const int &b);
int cmp(const int&a,const int &b)
int tj[10001],gw[10001];
int main(void)
else if(tj[i]==gw[k])
else if(tj[j]==gw[x])
{if(tj[j]
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 ...
hdu1052 田忌賽馬 貪心
錯誤 include 田忌賽馬,錯誤版 include include 思路 用田忌最快的馬與齊王最快的馬比較,1.若能贏就贏 2.若贏不了,就用最差的馬拖齊王最好的馬入水 3.若打平 要判斷是否在最好一匹馬,若是,則打平,若不是,則用最差的一匹馬拖它下水,雖然輸了這次,但下次有機會贏回。看似無差別...