• TYVJ 1048 田忌赛马 贪心解法


    描述

        中国古代的历史故事“田忌赛马”是为大家所熟知的。话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢取最多的钱?

    输入格式

    第一行为一个正整数n (n <= 1000) ,表示双方马的数量。
    第二行有N个整数表示田忌的马的速度。
    第三行的N个整数为齐王的马的速度。

    输出格式

    仅有一行,为田忌赛马可能赢得的最多的钱,结果有可能为负。

    测试样例1

    输入


    92 83 71 
    95 87 74

    输出

    200
     1 /*
     2     首先,双方的马按速度排序。
     3     考虑己方最弱的马和对方最弱的马的速度关系。如果对方更弱,那么不妨就用这匹马去对对方的那匹马;如果我方更弱,那么不妨用这匹马和对方当前最强的马比赛。(平局稍后再说)
     4     同样地,可以考虑己方最强的马和对方最强的马的关系。
     5     不停地贪心处理,直到双方最强的马相等、最弱的马也相等。
     6     再考虑己方最弱马 和对方最强马的关系  
     7     相等就强制让这两局平局发生。
     8     否则就耗掉对方最强马 
     9     继续处理,直到所有的马都用完。
    10 */
    11 #include<cstdio>
    12 #include<iostream>
    13 #include<algorithm>
    14 #define MAXN 10010
    15 
    16 using namespace std;
    17 
    18 int a[2][MAXN];
    19 
    20 int n,ans;
    21 
    22 inline void read(int &x) {
    23     int f=1;x=0;char c=getchar();
    24        while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
    25     while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-48;c=getchar();}
    26        x=x*f;
    27 }
    28 
    29 int main() {
    30     read(n); 
    31     for(int i=1;i>=0;i--) //a[1]代表田忌 a[0]代表齐王 
    32       for(int j=1;j<=n;j++)
    33         read(a[i][j]);
    34     sort(a[0]+1,a[0]+1+n);
    35     sort(a[1]+1,a[1]+1+n);
    36     int tl=1,tr=n,jl=1,jr=n;
    37     while(tl<=tr) {
    38         if(a[1][tl]>a[0][jl]) {tl++;jl++;ans++;continue;}
    39         else if(a[1][tl]<a[0][jl]) {tl++;jr--;ans--;continue;}
    40         else if(a[1][tl]==a[0][jl]) {
    41             if(a[0][jr]<a[1][tr]) {tr--;jr--;ans++;continue;}
    42             else if(a[1][tr]<a[0][jr]) {ans--;tl++;jr--;continue;}
    43             else if(a[1][tr]==a[0][jr]) {
    44                 if(a[1][tl]==a[0][jr]) {tl++;jr--;continue;}
    45                 else if(a[1][tl]<a[0][jr]) {tl++;jr--;ans--;continue;}
    46             }
    47         }
    48     }
    49     printf("%d
    ",ans*200);
    50     return 0;
    51 }
    代码
     


    作者:乌鸦坐飞机
    出处:http://www.cnblogs.com/whistle13326/
    新的风暴已经出现 怎么能够停止不前 穿越时空 竭尽全力 我会来到你身边 微笑面对危险 梦想成真不会遥远 鼓起勇气 坚定向前 奇迹一定会出现

     
  • 相关阅读:
    【小米OJ-找多少个等差数列】动态规划
    【小米OJ-找出可能的合的组合】深搜(dfs)
    【小米OJ-移除k位得到最小值】栈的应用
    【小米OJ-小米兔的轨迹】顺时针蛇形矩形
    Qt常用类
    file_operations
    Proc文件系统
    memset
    Source Insight快捷键大全
    内核内存分配
  • 原文地址:https://www.cnblogs.com/whistle13326/p/6821730.html
Copyright © 2020-2023  润新知