hdu-1052(贪心)

Posted mch5201314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu-1052(贪心)相关的知识,希望对你有一定的参考价值。

链接

[https://vjudge.net/contest/261555#problem/I]

题意

就是两个人都有n匹马,每只马都有战力
第二个人出马的顺序是战力大到小,请问第一个人采取怎样的策略使得自己总的胜场尽可能多

分析

肯定先对二者的战力分别排序
然后就是想尽可能地把第一个人的每只马发挥最大的作用
如果该马不能打败对方的任何一只马就让它尽可能地把对方最强战力的马,搞定
虽然输了但后面也会有更大的可能多赢
所以就从战力最弱的马相比较

  1. 如果当前的我最弱的马大于对方最弱的马就直接比掉
    得一分,
    2
    如果当前的我最弱的马小于对方最弱的马
    用弱马比掉对方最强的马,丢一分,但为后面创造了更大的概率赢
  2. 如果当前相等
    先比较当前双方最强的马
    如果我们大于对方直接比掉,以防后面被别人用
    因为这样的必胜是一定先下手,而且对我们后面没影响。
    否则。
    就拿弱马比掉对方最强的马,丢一分,但为后面创造了更大的概率赢

    代码

#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
#include<algorithm>
using namespace std;
#define ll long long
const int N=1e3+10;
int a[N],b[N];
int main(){
    int n;
    //freopen("in.txt","r",stdin);
    while(cin>>n&&n){
        for(int i=1;i<=n;i++)
        cin>>a[i];
        for(int j=1;j<=n;j++)
        cin>>b[j];
        sort(a+1,a+n+1);
        sort(b+1,b+n+1);
        int c1=0,c2=0;
        int u1=1,d1=n,u2=1,d2=n;
        while(u1<=d1&&u2<=d2){
            if(a[u1]>b[u2]){
                c1++,u1++,u2++;
            }
            else if(a[u1]<b[u2]){
                c2++;
                u1++;
                d2--;
            }
            else if(a[u1]==b[u2]){
                if(a[d1]>b[d2]){
                    c1++;
                    d1--,d2--;
                }
                else{
                    if(a[u1]<b[d2])
                    c2++;
                    u1++,d2--;
                }
            }
        }
        cout<<(c1-c2)*200<<endl;
    }
    return 0;
}

以上是关于hdu-1052(贪心)的主要内容,如果未能解决你的问题,请参考以下文章

hdu1052 Tian Ji -- The Horse Racing---田忌赛马贪心

hdu-1052(贪心)

HDU-1052 Tian Ji -- The Horse Racing 贪心 考虑特殊位置(首尾元素)的讨论

hdu 1052 田忌赛马

[HDU1052]Tian Ji -- The Horse Racing(田忌赛马)

hdu1052