zcmu 1059: 田忌賽馬(貪心)

【題目】

Description

田忌和齊王賽馬,兩人各出n匹馬,贏一場比賽得200兩銀子,輸了賠200銀子,平局不賠不賺.已知兩人每匹馬的速度,問田忌最多能贏多少銀子.

Input

多組測試數據,

每組數據的第一行是一個整數n。 (1<=n<=1000)

第二行包括n個整數既田忌每匹馬的速度.

第三行包括n個整數既齊王每匹馬的速度.

每匹馬的速度不超過1000.

Output

對於每組數據輸出一行有一個整數代表田忌最多能贏多少銀子

Sample Input

3 
92 83 71  
95 87 74 
2 
20 20 
20 20 
2 
20 19 
22 18 

Sample Output

200
0
0

【題意】

分別給定田忌的馬和齊王的馬的速度,要求輸出使用最優策略田忌最多能贏多少銀子。

【思路】

田弱跟齊弱比較,若田弱>齊弱,則田忌勝;田強跟齊強比較,若田強>齊強,則田忌勝;否則就拿田弱拉齊強下水,田忌輸一場(當然如果是平局就不勝也不敗)。

爲什麼要優先判斷田強和齊強而不直接田弱拉齊強下水呢~因爲,假如田弱=齊弱,而田強>齊強,如果田弱拉齊強下水,那麼不就白白敗一場了嗎~

【代碼】

#include <bits/stdc++.h>
using namespace std;
int main()
{
   int n,a[1005],b[1005];
   while(~scanf("%d",&n))
   {
       for(int i=0;i<n;i++) scanf("%d",&a[i]);
       for(int i=0;i<n;i++) scanf("%d",&b[i]);
       sort(a,a+n); sort(b,b+n);
       int ans=0,i=0,j=0,ii=n-1,jj=n-1;
       while(i<=ii)
       {
           if(a[ii]>b[jj]) ans++,ii--,jj--;
           else if(a[i]>b[j]) ans++,i++,j++;
           else
           {
               if(a[i]!=b[jj]) ans--;
               i++,jj--;
           }
       }
       printf("%d\n",ans*200);
   }
   return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章