1. 程式人生 > >poj 2287 Tian Ji -- The Horse Racing

poj 2287 Tian Ji -- The Horse Racing

!= space 好的 賽馬 content main 題意 一場 void

poj 2287 Tian Ji -- The Horse Racing

題意:
田忌賽馬
假設3匹馬變成1000匹。齊王仍然讓他的馬按從優到劣的順序出賽,田忌能夠按隨意順序選擇他的賽馬出賽。贏一局,田忌能夠得到200兩銀子,輸一局,田忌就要輸掉200兩銀子,平局的話不輸不贏。
請問田忌最多能贏多少銀子?



思路:
貪心。
假設當前最好的馬能夠勝齊王最好的馬。那麽讓這兩匹馬比一場;
假設當前最差的馬能勝齊王最差的馬,那麽讓這兩匹馬比一場;
假設上面兩個條件都不滿足。那麽讓當前最差的馬和齊王最好的馬比一場。



/*poj 2287
  題意:
  田忌賽馬 
  假設3匹馬變成1000匹,齊王仍然讓他的馬按從優到劣的順序出賽。田忌能夠按隨意順序選擇他的賽馬出賽。

贏一局,田忌能夠得到200兩銀子,輸一局。田忌就要輸掉200兩銀子。平局的話不輸不贏。 請問田忌最多能贏多少銀子?

思路: 貪心。 假設當前最好的馬能夠勝齊王最好的馬。那麽讓這兩匹馬比一場。 假設當前最差的馬能勝齊王最差的馬。那麽讓這兩匹馬比一場; 假設上面兩個條件都不滿足。那麽讓當前最差的馬和齊王最好的馬比一場。

*/ #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=1005; int a[N],b[N]; void gao(int n){ int p1=0,p2=0; int q1=n-1,q2=n-1; int ans=0; while(p1<=q1){ if(a[p1]>b[p2]){ ++p1; ++p2; ++ans; } else if(a[q1]>b[q2]){ --q1; --q2; ++ans; } else{ if(a[p1]!=b[q2]) --ans; ++p1; --q2; } } printf("%d\n",ans*200); } int main(){ int n; while(scanf("%d",&n) && 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); gao(n); } return 0; }



poj 2287 Tian Ji -- The Horse Racing