田忌賽馬
題意:給田忌 和 國王 各自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兩 如果是平局的話,雙方都不必拿出錢。現在每匹馬的速度值是固定而且已知的,而齊王出馬也不管田忌的出馬順序。請問田忌該如何安排自己的...