田忌賽馬 貪心 注意細節

2021-08-28 11:25:27 字數 1863 閱讀 3724

田忌賽馬

題意:給田忌 和 國王 各自n匹馬

比賽n輪 每匹馬只能比一場  贏的一方得200 平得0

田忌最多贏多少

思路貪心:區域性最優------》全域性最優

先排序 大到小

然後ti  ki 分別指向田忌 國王當前(即還沒比)最大速度那匹馬

tj  kj   各自。。。。最小速度

1)田最快 > 國王最快 -----------田肯定贏  

注意:是否拿田最快  打  國王最快    我當時認為最貪心應該看看後面還有沒有也能 打過  國王最快的  有就拿那匹

分析:田  a b c d

國王 k f j

現在會不會存在一種情況  b能打過k 但不能打過f  而a能打過f? 如果存在那就證明我上面的猜想正確 不能直接用田最快 打 王最快

a >= b   k>=f   如果b打過k 必然b就能打過f 所以不存在

所以答案應該 田最快 打 王最快

2)田最快 < 國王最快 -----------田肯定輸

直接拿田當前最慢的 和  王最快的比

3)田最快 ==國王最快

3.1)  如果田最慢  > 王最慢  ----田贏

田最慢  打 王最慢

3.2)  如果田最慢  == 王最慢  ----田可能輸 可能平

既然贏不了 那就用田最慢耗掉王的最快吧

輸:田最慢   < 王最快

平:田最慢   == 王最快(可能當前只剩1匹 最快最慢都是一匹 那不就有可能相等了)

#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

#define pi acos(-1.0)

#define ll long long

#define lson l, m, rt << 1

#define rson m + 1, r, rt << 1 | 1

//#define mp make_pair

#define pb push_back

#define ull unsigned ll

#define mem(a, b) memset(a, b, sizeof(a))

#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)

//#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);

const int maxn = 1000 + 100;

int tian[maxn], king[maxn];

int cmp(int a, int b)

int main()

//田最快 == 王最快

else if (tian[ti] == king[ki])

//田最慢 <= 王最慢 田慢 打 王快

//田肯定輸

else

田最慢 < 王最慢 田慢 打 王快

田輸//else if (tian[tj] < king[kj])

平局//else

}//田快 < 王快 拿田慢 比 王快

//田輸

else

} printf("%d\n", ans);

}}

田忌賽馬(貪心)

描述 中國古代的歷史故事 田忌賽馬 是為大家所熟知的。話說齊王和田忌又要賽馬了,他們各派出n匹馬,每場比賽,輸的一方將要給贏的一方200兩 如果是平局的話,雙方都不必拿出錢。現在每匹馬的速度值是固定而且已知的,而齊王出馬也不管田忌的出馬順序。請問田忌該如何安排自己的馬去對抗齊王的馬,才能贏取最多的錢...

田忌賽馬(貪心

給出田忌和齊王各馬的速度,求最優得分 我的貪心策略 當然是錯的 1,用我方在 可以 戰勝 或 比平 對方最慢的馬 的馬 中 最慢的馬 去比 對方最慢的馬 2,直到我方最快的馬也下場了,剩下的馬預設全部戰敗 這種策略明顯是不對的 我方的快馬的貪心策略應該是擊敗能力範圍內對方最快的馬 浪費最小 我方的慢...

貪心DP 田忌賽馬

田忌賽馬 描述 description 中國古代的歷史故事 田忌賽馬 是為大家所熟知的。話說齊王和田忌又要賽馬了,他們各派出n匹馬,每場比賽,輸的一方將要給贏的一方200兩 如果是平局的話,雙方都不必拿出錢。現在每匹馬的速度值是固定而且已知的,而齊王出馬也不管田忌的出馬順序。請問田忌該如何安排自己的...