hdu 1052 Tian Ji 田忌赛马【贪心】(水题)

题目链接:https://vjudge.net/problem/HDU-1052

转载于>>>

题目大意:

田忌赛马的故事众所都知,田忌与国王赛马,赢一场赚200,输一场亏200,平局没有影响。问田忌最大能赚多少。
输入:
输入数据多达50个测试案例。每一个数据都是由一个正整数n(1000个)开始,这是马的数目。第二行每一个整数是田忌的马的速度。第三行的每一个整数是国王的马的速度。n为0则输入结束。
输出:
对于每一个输入的情况,输出一行包含一个单一的数字,这是田忌将获得的最大的钱数。

说实话,对这道题还不是很懂,为什么田忌最快的马比齐王最快马要快的时候,它们两要相比

比如:   100    80    75   70    65

              98      81    76   72    67

这组数据,很明显不符合啊,算了,这道题先记录着吧,以后再看看。

况且为什么这道题是道贪心题啊!

#include<iostream>
using namespace std;
bool cmop(int a,int b)
{
     return a>b;
} 
int main()
{
    int i,j,h,n,king[1005],tianji[1005],kquick,kslow,tquick,tslow,total;
    while(cin>>n,n)
    {
    total=0;
      for(i=0;i<n;i++)
        cin>>tianji[i];
      for(i=0;i<n;i++)
        cin>>king[i];
      sort(king,king+n,cmop);
      sort(tianji,tianji+n,cmop);
      //kquick=king's the most quick ,kslow =king's the most slow 
      kquick=tquick=0;
      kslow=tslow=n-1;
      for(i=0;i<n;i++)//i is tianji the most quick
      {
         //当田忌最快的马比国王最快的马快时 用田忌最快的马跟国王最快的马比 
         if(tianji[tquick]>king[kquick])
         {
             total+=200;
             kquick++;
             tquick++; 
         } 
         //当田忌最快的马比国王最快的马慢时 用田忌最慢的马跟国王最快的马比
         else if(tianji[tquick]<king[kquick])
         {
              total-=200;
              tslow--;
              kquick++;
         }
         else//j is tianji  
         {
             for(j=tslow,h=kslow;j>=tquick;j--,h--)
             {
                 if(tianji[j]>king[h])//当田忌最慢的马比国王最慢的马快时 用田忌最慢的马跟国王最慢的马比
                 {
                     total+=200;
                     tslow--;
                     kslow--;
                 }
                 else // 用田忌最慢的马跟国王最快的马比
                 {
                     if(tianji[j]<king[i])
                     {
                         total-=200;
                         tslow--;
                         kquick++;
                     }
                     tslow=--j;
                     kslow=h;
                     break;
                 }
             }
         }
         if(tquick>tslow)
           break;
      }
      
      cout<<total<<endl;
    }
    return 0;

2018-04-24

猜你喜欢

转载自www.cnblogs.com/00isok/p/8933613.html