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
  • 相关阅读:
    CDOJ 1270 Playfair(模拟)
    HDU 2209 翻纸牌游戏(DFS)
    HDU 1241 Oil Deposits(DFS)
    pta 01-复杂度2 Maximum Subsequence Sum (25分)
    poj 1469 COURSES 二分匹配 dfs
    01-复杂度1 最大子列和问题 (20分)分治
    poj 1325 Machine Schedule 二分图匹配+DFS实现
    zoj 1654 Place the Robots 二分图匹配DFS实现
    图论笔记-第七章
    hdu 5423 Rikka with Tree DFS
  • 原文地址:https://www.cnblogs.com/JJCHEHEDA/p/5663032.html
Copyright © 2011-2022 走看看