UVA 1344 - Tian Ji -- The Horse Racing(很好的贪心题)

来源:互联网 发布:java如何转换日期格式 编辑:程序博客网 时间:2024/04/30 08:47

这里多次用到贪心的最优化选择和证明。

首先,T,t表示田忌最快马,和最慢马 ,K,k表示国王最快马,和最慢马。

若 T > K   T与K组合,

若T < K    t 与K组合。

若T == K,{

    若 t <= k   t与K 组合。

   else  t与k组合。 

}

每一个都可以用任意交换不更差的方法证明。每一步都是对当前的贪心决策。

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <map>using namespace std;const int maxn = 11111;int t[maxn],k[maxn];int main(){    int n;    while(scanf("%d",&n)==1&&n){      for(int i=0;i<n;i++)        scanf("%d",&t[i]);      for(int i=0;i<n;i++)        scanf("%d",&k[i]);        sort(t,t+n);        sort(k,k+n);      int T,K,tm,km;      int win = 0,tie=0,lose=0;      for(T=n-1,K=n-1,tm=0,km=0;T>=tm&&K>=km;){          if(t[T] > k[K]){              win++; T--; K--;          }          else if(t[T]<k[K]){              lose++; tm++; K--;          }          else{             if(t[tm]<=k[km]){               if(t[tm] < k[K]) lose++;               tm++; K--;             }             else {                win++; tm++; km++;             }          }      }      printf("%d\n",(win-lose)*200);    }    return 0;}



0 0
原创粉丝点击