貪心 田忌賽馬問題

2021-09-19 18:09:18 字數 1187 閱讀 2015

田忌和齊王各有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,直到我方最快的馬也下場了,剩下的馬預設全部戰敗 這種策略明顯是不對的 我方的快馬的貪心策略應該是擊敗能力範圍內對方最快的馬 浪費最小 我方的慢...