zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    ed新手使用进阶全功略
    directx的媒体对象
    Makefile详解
    Bourne Shell及shell编程(1)
    Win32CompileMSYSNew
    GNU hello学习笔记(1)——autoconf和automake
    VC++中通过MultiByteToWideChar将string|char*转换为wstring|wchar_t*
    使用 Bash shell 脚本进行功能测试[转]
    添加VLC模块
    libvlc外部api的简单整理
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/7601985.html
Copyright © 2011-2022 走看看