注:看到一篇部落格證明得挺好的。僅僅為了留在存根
演算法可以用dp,或者給每匹馬連線賦權變為二分圖最佳匹配,還有就是貪心了。
1.當田忌最慢的馬比齊王最慢的馬快,贏一場先
2.當田忌最慢的馬比齊王最慢的馬慢,和齊王最快的馬比,輸一場
3.當田忌最快的馬比齊王最快的馬快時,贏一場先。
4.當田忌最快的馬比齊王最快的馬慢時,拿最慢的馬和齊王最快的馬比,輸一場。
5.當田忌最快的馬和齊王最快的馬相等時,拿最慢的馬來和齊王最快的馬比.
田忌賽馬貪心的正確性證明。
先說簡單狀況下的證明:
1.當田忌最慢的馬比齊王最慢的馬快,贏一場先。因為始終要贏齊王最慢的馬,不如用最沒用的馬來贏它。
2.當田忌最慢的馬比齊王最慢的馬慢,和齊王最快的馬比,輸一場。因為田忌最慢的馬始終要輸的,不如用它來消耗齊王最有用的馬。
3.當田忌最慢的和齊王最慢的馬慢相等時,分4和5討論。
4.當田忌最快的馬比齊王最快的馬快時,贏一場先。因為最快的馬的用途就是來贏別人快的馬,別人慢的馬什麼馬都能贏。
5.當田忌最快的馬比齊王最快的馬慢時,拿最慢的馬和齊王最快的馬比,輸一場,因為反正要輸一場,不如拿最沒用的馬輸。
6.當田忌最快的馬和齊王最快的馬相等時,這就要展開討論了,貪心方法是,拿最慢的馬來和齊王最快的馬比.
前面的證明像公理樣的,大家一看都能認同的,沒有異議的,就不細說了。
證明:田忌最快的馬和齊王最快的馬相等時拿最慢的馬來和齊王最快的馬比有最優解。
1)假設他們有n匹馬,看n=2的時候.
a1 a2
b1 b2
因為 田忌最快的馬和齊王最快的馬相等 所以a1=b1,a2=b2 所以這種情況有2種比賽方式,易得這兩種方式得分相等。
2)當數列a和數列b全部相等等時(a1=b1,a2=b2...an=bn),顯然最慢的馬來和齊王最快的馬比有最優解,可以贏n-1長,輸1場,找不到更好的方
法了。3)當數列a和數列b元素全部相等時(a1=b1=a2=b2...=an=bn),無法贏也不輸。
現在假設n匹馬時拿最慢的馬來和齊王最快的馬比有最優解,證明有n+1匹馬時拿最慢的馬來和齊王最快的馬比也有最優解。
數列a1 a2 a3 a4...an an+1
b1 b2 b3 b4...bn bn+1
其中ai>=ai-1,bi>=bi-1
數列a和數列b不全部相等時,拿最慢的馬來和齊王最快的馬比數列得到數列
(a1) a2 a3 a4...an an+1
b1 b2 b3 b4...bn (bn+1)
分4種情況討論
1.b1=b2,an=an+1
則有a2 a3 a4...an
b2 b3 b4...bn
其中a2>=a1,a1=b1,b1=b2,得a2>=b2(此後這種大小關係不再論述),an>=bn.
此時若a2=b1,根據歸納假設,有最優解,否則a2>根據前面「公理」論證有最優解。
當且僅當a數列,b數列元素全部相等時有an+1=b1,已證得,所以an+1>b1,贏回最慢的馬來和齊王最快的馬比輸的那一場。
2.b1<=b2,an=an+1
交換 b1,b2的位置,
數列(a1) a2 a3 a4...an an+1
b2 b1 b3 b4...bn (bn+1)
此時 a2>=a1,an>=bn,
對於子表
a2 a3 a4...an
b1 b3 b4...bn
根據前面「公理」或歸納假設,有最優解。
an+1>=b2,當且僅當b2=b3=b4=..=bn+1時有an+1=b2,這種情況,a中其它元素<=b1,b2,b3,b4..bn,對於這部分來說,能贏x盤(x<=n),假如不拿最慢的馬來和齊王最快的馬比則拿最快的馬來和齊王最快的馬比,此時平一盤,能贏x-1盤,而拿最慢的馬來和齊王最快的馬比,輸一盤能贏x盤,總的來說,還是x這個數,沒有虧。
3.b1=b2,an<=an+1
4.b1<=b2,an<=an+1證明方法類似,不再重複。
以證得當有n+1匹馬的時候,田忌和齊王最快最慢的馬速度相等時,拿最慢的馬來和齊王最快的馬比有最優解,已知當n=2時成立,所以對於n>2且為整數(廢話,馬的隻數當然是整數)時也成立。當n=1時....這個似乎不用討論.
#include#includeusing namespace std;
int main()
else if(tian[tian_nummin]==qi[qi_nummin])
else if(tian[tian_nummax]
HDU 1052 田忌賽馬
hdu 貪心 貪心專題 田忌賽馬 不知道上網搜一下回來 每次輸入乙個n代表馬匹數,下一行輸出田忌每一匹馬的數值,然後是王的馬匹數值。田忌贏一局得200,輸一局扣200,求田忌最多能賺多少。sample input 3 92 83 71 95 87 74 220 20 20 20 220 19 22 ...
hdu 1052 田忌賽馬加強
背景 由於前些天做了貪心的題目就準備刷點貪心看看,不過由於會長告訴我要以集訓隊培訓為主,自學為輔,所以這周大概要集中精力看集訓隊的題了,都是杭電oj的,會先自己嘗試ac,實在不行再去看解題報告,受到會長大神鼓勵我一定要加油了 學習 其實這道題想了好久還是沒有考慮周到,都是看了discuss裡的資料才...
hdu1052 田忌賽馬 貪心
錯誤 include 田忌賽馬,錯誤版 include include 思路 用田忌最快的馬與齊王最快的馬比較,1.若能贏就贏 2.若贏不了,就用最差的馬拖齊王最好的馬入水 3.若打平 要判斷是否在最好一匹馬,若是,則打平,若不是,則用最差的一匹馬拖它下水,雖然輸了這次,但下次有機會贏回。看似無差別...