POJ 2287 田忌賽馬 貪心算法


田忌賽馬,大致題意是田忌和國王賽馬,贏一局得200元,輸一局輸掉200元,平局則財產不動。

先輸入一個整數N,接下來一行是田忌的N匹馬,下一行是國王的N匹馬。當N為0時結束。
此題為貪心算法解答,有兩種思路。
思路二:
1、開始也是先排序,可以使用sort快排;
2、然后將田忌最大的馬與國王進行比較;
3、如果田忌最大的馬大於國王,那么就勝場++;
4、如果田忌最大的馬小於國王,那么就一定會輸,所以用田忌最小的馬輸給國王最大的馬;
5、如果田忌最大的馬等於國王,那么就比較最小的馬;
5。1、如果田忌最小的馬大於國王,那么勝場++;
5。2、如果田忌最小的馬小於國王,那么就輸給國王;
5。3、如果田忌最小的馬等於國王,就用田忌最小的馬對國王最大的馬,如果國王最大的馬大,那么財產要減200;
 
const int Max = 1050; 
  bool cmp(int a,int b) { return a > b; }
  int pk2()
  { 
   int tian[Max],king[Max];
   int i,j,n,m; 
   while(cin >> n)
   { 
   if(n == 0) break;
    for(i=1; i<=n; i++) { cin >> tian[i]; }
    for(i=1; i<=n; i++) { cin >> king[i]; }
    sort(tian+1,tian+1+n,cmp); 
    sort(king+1,king+1+n,cmp);
    int ans = 0;
    int ii,jj; 
    for(i=1, j=1, ii=n, jj=n; i<=ii; )
    {
     if(tian[i] > king[j])  { ans += 100; i++,j++; } 
     else if(tian[i] < king[j])  { ans -= 100; j++,ii--; }
     else
     {
      if(tian[ii] > king[jj])
      {
       ans += 100;
       ii--,jj--;
      } 
      else
      {
       if(tian[ii] < king[j]) 
        ans -= 100;
       ii--,j++;
      }
     }
    } 
     cout << ans << endl;
   } 
   return 0;
  }
int main()
{ 
  pk2();
   return 0;
}

參考:

http://blog.163.com/zhaoyuan_sue/blog/static/20868323120125280842774/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM