田忌和齊王各有n匹馬,共有2n組資料,分別給出田忌和齊王n匹馬的速度。
他們一共要進行n場比賽,若能分出勝負,則輸的一方要給贏的一方200銀元。若平局,則他們都不用給對方錢。每匹馬都只能用一次。現在要你求出乙個最佳策略,使田忌獲得的錢數最多。並輸出這個最大值。
先對田忌和齊王的馬的速度的陣列進行一次從小到大的排序。
step1:我們先比較田忌最快的馬和齊王最快的馬的速度,若田忌獲勝,就讓這兩匹馬比賽。
step2:若田忌最快的馬沒有齊王最快的馬的速度快,則用田忌最慢的馬和齊王最快的馬比賽。
step3:若田忌最快的馬沒有齊王最快的馬的速度相等,則比較他們最慢的馬的速度,這又分為兩種情況。情況1:田忌最慢的馬比齊王最慢的馬的速度快,則讓它們比賽。情況2:田忌最慢的馬比齊王最慢的馬的速度慢或者相等,則讓田忌最慢的馬和齊王最快的馬比賽。
#include
#include
#define max 100
using namespace std;
int n;
//兩人各有n匹馬
int tian[max]
,qi[max]
;int
main()
for(
int i=
0;i)sort
(tian,tian+n)
;sort
(qi,qi+n)
;//從小到大排序
int i=
0,j=0;
//i和j分別表示田忌和齊王最慢的馬
int k1=n-
1,k2=n-1;
//k1和k2分別表示田忌和齊王最快的馬
int num=0;
//計數已經比賽過的馬的數量
int money=0;
//田忌獲得的錢
while
(numif(tian[k1]
(tian[k1]
==qi[k2]
)else
i++; k2--
; num++
;continue;}
}}cout
}
貪心 田忌賽馬題解
田忌準備和齊王賽馬,各自拿出的比賽馬匹數是n個,勝負由每匹馬的速度決定,田忌可 以自由選擇自己的馬和齊王的比賽,田忌贏一次賞金加50,輸一次賞金賠50,田忌賺的 錢最低為0,求田忌最多能賺多少錢?輸入 多行測試資料,每行包含乙個整數n和2n個正整數,第乙個n表示比賽馬的數量,之後的n個整數表示齊王馬...
田忌賽馬(貪心)
描述 中國古代的歷史故事 田忌賽馬 是為大家所熟知的。話說齊王和田忌又要賽馬了,他們各派出n匹馬,每場比賽,輸的一方將要給贏的一方200兩 如果是平局的話,雙方都不必拿出錢。現在每匹馬的速度值是固定而且已知的,而齊王出馬也不管田忌的出馬順序。請問田忌該如何安排自己的馬去對抗齊王的馬,才能贏取最多的錢...
田忌賽馬(貪心
給出田忌和齊王各馬的速度,求最優得分 我的貪心策略 當然是錯的 1,用我方在 可以 戰勝 或 比平 對方最慢的馬 的馬 中 最慢的馬 去比 對方最慢的馬 2,直到我方最快的馬也下場了,剩下的馬預設全部戰敗 這種策略明顯是不對的 我方的快馬的貪心策略應該是擊敗能力範圍內對方最快的馬 浪費最小 我方的慢...