田忌賽馬 貪心演算法

2021-10-12 07:23:06 字數 1979 閱讀 5267

演算法實驗課回顧

問題描述

你一定聽說過田忌賽馬的故事吧?如果3匹馬變成n匹(n<=100),齊王仍然讓他的馬按照優到劣的順序初賽,田忌可以按任意順序選擇他的賽馬出賽。贏一局,田忌可以得到200兩銀子;輸一局,田忌就要輸掉200兩銀子。已知道國王和田忌的所有馬的奔跑速度,並且所有馬的奔跑速度均不相同,現已經對兩人的馬分別從快到慢排好序。請設計乙個演算法,幫助田忌贏得最多的銀子。

要求:

輸入:第一行乙個整數n,表示雙方各有n匹馬;

第二行n個整數分別表示田忌的n匹馬的速度;

第三行n個整數分別表示齊王的n匹馬的速度。

如果田忌最快的馬比齊王最快的馬快,則比之

如果田忌最快的馬比齊王最快的馬慢,則用田最慢的馬跟齊最快的馬比

// 這是貪心的第一步

如果田忌最快的馬的速度與齊威王最快的馬速度相等

如果田忌最慢的比齊威王最慢的快,則比之

// 這是貪心的第二步

如果田忌最慢的比齊威王最慢的慢,田忌慢vs齊王快

田忌最慢的與齊威王最慢的相等,田忌慢vs齊王快

#include

#include

using

namespace std;

// 快排

void

quick

(int a,

int begin,

int end)

a[i]

= t;

quick

(a, begin, i -1)

;quick

(a, i +

1, end);}

// 田忌賽馬演算法

inttianrac

(int tian,

int king,

int n)

// 田忌快馬比齊王快馬慢時,用最慢的馬跟他最快的比(埋伏他一手,這匹馬不用搶,他死定了,反手乙個超級加倍,悶聲發大財)

else

if(tian[tianh]

< king[kingh]

)// 田忌的快馬和齊王的快馬一樣快時(他也一樣快?不過不用怕,他的馬贏不了我)

else

// 田忌的慢馬比齊王的慢馬一樣快和慢時,就用慢馬和他快馬比(如果將這個慢馬換成快馬我的馬將絕殺,可惜換不得)

else}}

// 返回田忌贏的錢

return money;

}int

main()

cout <<

"王 馬之疾"

<< endl;

for(

int i =

0; i < n; i++

)// 排序,降序排

quick

(tian,

0, n-1)

;quick

(king,

0, n -1)

;// 呼叫「就算佛祖來了,田姥爺也難輸」函式

int result =

tianrac

(tian, king, n);if

(result >0)

else

if(result ==0)

else

return0;

}

測試資料:

95 92 80 85 98 86 81 83

88 89 97 99 82 85 90 91

80 79 90 95 78 85 68 91

95 92 99 85 98 86 85 96

結果截圖:

ps: 這個演算法對田姥爺太難輸了…

田忌賽馬貪心演算法 田忌賽馬問題 貪心演算法

關於輸入 輸入包含多組測試資料.每組測試資料的第一行是乙個整數n 1 n 1000 表示田忌和齊王都擁有n匹馬。接下來一行是n個整數,表示田忌的馬的速度,下一行也是n個整數,表示齊王的馬的速度。輸入的最後以乙個0表示結束。關於輸出 對每組資料,如果田忌能贏則輸出 win 如果田忌能輸則輸出 lose...

田忌賽馬貪心演算法 貪心演算法 田忌賽馬問題

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

田忌賽馬貪心演算法 貪心演算法解決田忌賽馬

田忌賽馬 對策問題 教學目標 1 通過簡單的事例,使學生初步體會對策論在解決.梁錦美有無課件 上課時間 有 12 月 15 日 1 田忌賽馬中的數學問題 課時.同學們,你聽過 田忌賽馬 的故事嗎?第一次賽馬 上 上 中 中 下 田忌 下齊.上課周次 十六 有無課件 上課時間 有 12 月 15 日 ...