贪心策略如下:
如果田忌最快的马比齐王最快的马快
则田忌最快的马必定胜一场,最优策略是消耗掉齐王最快的马。
如果田忌最快的马比齐王最快的马慢
则齐王最快的马必定胜一场,最优策略是用田忌最慢的马去消耗齐王最快的马
如果田忌最快的马与齐王最快的马速度相同,则分为以下两个情形
1.田忌最慢的马比齐王最慢的马快
则齐王最慢的马必定输一场,最优策略是用田忌最慢的马去消耗齐王最慢的马
2.田忌最慢的马小于等于齐王最慢的马
此时田忌最慢的马必定不会赢一场,齐王最快的马必定不会输一场,则最优策略是用田忌最慢的马去消耗齐王最快的马
扫描二维码关注公众号,回复:
29258 查看本文章
代码思路:用数组表示队列,维护头尾指针即可
#include <iostream> #include <stdio.h> #include <memory.h> #include <memory> #include <math.h> #include <algorithm> #include <stdlib.h> using namespace std; int n; int tianh[1005]; int qih[1005]; int main() { while(cin >> n,n) { memset(tianh,0,sizeof(tianh)); memset(qih,0,sizeof(qih)); for(int i=0; i<n; i++) cin >> tianh[i]; for(int i=0; i<n; i++) cin >> qih[i]; int qhead = 0,qtail = n-1,thead=0,ttail=n-1; int money = 0; sort(tianh,tianh+n); sort(qih,qih+n); while(qhead<=qtail) { if(tianh[ttail] > qih[qtail]) { money+=200; qtail--; ttail--; } else if(tianh[ttail] < qih[qtail]) { money-=200; qtail--; thead++; } else { if(tianh[thead]>qih[qhead]) { money+=200; thead++; qhead++; } else { if(tianh[thead]<qih[qtail]) money-=200; thead++; qtail--; } } } cout<<money<<endl; } return 0; }