zoukankan      html  css  js  c++  java
  • UVALive

    耳熟能详的故事,田忌赛马,第一行给出田忌的马的速度,第二行是齐王的马的速度,田忌赢一场得200,输一场失去200,平局不得也不失,问最后田忌最多能得多少钱?

    都知道在故事里,田忌用下等马对上等马,中等马对下等马,上等马对中等马,一负两胜,这就是贪心的策略。在这题中,先将速度排序,首先用田忌速度最快的马去匹配,如果大于齐王速度最快的马,就刚它,如果小于它,那么就说明这一场肯定是要输了,既然是要输,那么用速度最慢的马去输,这样可以将速度最快的马保留下来,如果和齐王的速度最快的马速度相同,那么暂时放在这里,去比较速度最慢的田忌和齐王的马,如果最慢的马田忌的快那么就赢了这一局,如果小于或等于,说明赢不了,那么用这匹慢马去和之前速度最快的比,这样还是将速度最快的马保留下来。

    反正就是如果赢不了的比赛,我就用最慢的马去消耗你最快的马!

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 const int M = 1e3 + 10;
     8 int a[M],b[M];
     9 bool cmp(int x,int y) {return x>y;}
    10 
    11 int main()
    12 {
    13     int n;
    14     while (~scanf("%d",&n)&&n)
    15     {
    16         for (int i=1 ; i<=n ; i++) scanf("%d",a+i);
    17         for (int i=1 ; i<=n ; i++) scanf("%d",b+i);
    18         sort(a+1,a+n+1,cmp);
    19         sort(b+1,b+n+1,cmp);
    20         int sa=1,sb=1,ea=n,eb=n,ans=0;
    21         a[0]=a[n+1]=b[0]=b[n+1]=0;
    22         while (n--)
    23         {
    24             if (a[sa]>b[sb])
    25             {
    26                 ans+=200;
    27                 sa++;
    28                 sb++;
    29                 continue;
    30             }
    31             if (a[sa]==b[sb])
    32             {
    33                 if (a[ea]>b[eb])
    34                 {
    35                     ans+=200;
    36                     ea--;
    37                     eb--;
    38                 }
    39                 else
    40                 {
    41                     if (a[ea]<b[sb]) ans-=200;
    42                     sb++;
    43                     ea--;
    44                 }
    45                 continue;
    46             }
    47             if (a[sa]<b[sb])
    48             {
    49                 ans-=200;
    50                 ea--;
    51                 sb++;
    52             }
    53         }
    54         printf("%d
    ",ans);
    55     }
    56     return 0;
    57 }
    View Code
  • 相关阅读:
    php使用redis的有序集合zset实现延迟队列
    php使用redis的几种常见方式和用法
    redis缓存雪崩,缓存穿透,缓存击穿的解决方法
    php操作redis数据库方法总结
    mysql 悲观锁与乐观锁的理解
    OAuth2.0 协议的理解
    windows下的mongodb安装与配置
    node.js中对 redis 的安装和基本操作
    node.js中对 mysql 进行增删改查等操作和async,await处理
    node.js中 koa 框架的基本使用方法
  • 原文地址:https://www.cnblogs.com/JJCHEHEDA/p/5663032.html
Copyright © 2011-2022 走看看