Poj 2287 田忌賽馬解題詳解(貪心思想)

2021-07-05 05:06:12 字數 1414 閱讀 4826

題意是:田忌賽馬的故事,兩個人賽馬,第一行輸入的數是兩個人馬的匹数,都是相同的,第二行輸入的是田忌的馬的強弱值,第三行輸入的是國王馬的強弱值,然後如果n==0則程式結束。

解題思路:貪心思想

如果田忌的最強馬大於國王的最強馬直接比

如果田忌的最強馬小如國王的最強馬拿最弱的那匹馬跟國王的最強馬比

如果田忌的最強馬等於國王的最強馬拿最弱的那匹馬國王比較

如果·最弱的馬跟最弱的馬相等直接比較

#include

#include

#include

#include

using

namespace

std;

int n;

const

int maxn = 100000;

int a[maxn];//田忌的馬

int b[maxn];//齊王的馬

int cmp(int x1,int x2)

int main()

for(int i = 0; i < n; i++)//輸入田忌的馬

for(int i = 0; i < n; i++)//輸入國王的馬

sort(a,a+n,cmp);//進行從高到底的一次排序

sort(b,b+n,cmp);

long

long sum =0;

int j = 0;

int i = 0;

int ti = n-1;//最弱的馬的位置

int tj = n-1;//國王最弱馬的位置

int flag = 0;//比的次數

while(flag!=n)

else

if(a[i] < b[j])//如果田忌的最強馬小如國王的最強馬的力量就用田忌最弱的馬跟國王比輸一場

else

if(a[i] == b[j])//如果田忌的最強馬跟國王最強馬相等,

else

if(a[ti] < b[j])//如果田忌的最弱馬小如國王的最弱馬

}else

if(a[ti] < b[tj])//田忌的最弱馬小如國王的最弱馬還是拿田忌的最弱馬跟國王最強馬拿來比較

else

if(a[ti] > b[tj])//如果田忌的最弱馬大於國王的最弱馬直接最弱馬最弱馬相比}}

sum = sum*200;

printf("%lld\n",sum);

}return0;}

/*幾組好的測試資料

811 9 8 8 8 4 3 2

11 8 8 8 8 4 3 2

答案:800

389 85 81

90 85 81

答案:200

32 3 5

3 4 4

答案:0

*/

田忌賽馬(POJ 2287)

問題描述 你一定聽過田忌賽馬的故事吧?如果3匹馬變成1000匹,齊王仍然讓他的馬按從優到劣的順序出賽,田忌可以按任意順序選擇他的賽馬出賽。贏一局,田忌可以得到200兩銀子,輸一局,田忌就要輸掉200兩銀子,平局的話不輸不贏。請問田忌最多能贏多少銀子?關於輸入 輸入包含多組測試資料.每組測試資料的第一...

POJ 2287 田忌賽馬(貪心)

2.accepted 雙方各有n匹戰鬥力各異的馬,分別派出來pk,假設對方先出牌,我方後出,求我方最多能勝幾場 description poj2287田忌賽馬 貪心 author michael ming date 2019 7 2 23 55 modified by include include...

POJ 2287 田忌賽馬 貪心演算法

田忌賽馬,大致題意是田忌和國王賽馬,贏一局得200元,輸一局輸掉200元,平局則財產不動。先輸入乙個整數n,接下來一行是田忌的n匹馬,下一行是國王的n匹馬。當n為0時結束。此題為貪心演算法解答,有兩種思路。思路二 1 開始也是先排序,可以使用sort快排 2 然後將田忌最大的馬與國王進行比較 3 如...