• 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/

  • 相关阅读:
    091122杂记
    20100304我的碎碎念
    写给自己
    开始学习AGG
    找两个数组中的相同元素
    要多写代码了
    [翻译] AGG Reference 之 Basic Renderers(基础渲染器)
    在博客园日志中显示数学公式(旧,ASCIIMathML.js版说明)
    091128日志(博客园博客显示数学公式的方法!)
    与临时对象的斗争(上)
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/7601985.html
Copyright © 2020-2023  润新知