zoukankan      html  css  js  c++  java
  • bzoj2091 [Poi2010]The Minima Game

     [Poi2010]The Minima Game

    Time Limit: 10 Sec  Memory Limit: 259 MB
    Submit: 619  Solved: 425
    [Submit][Status][Discuss]

    Description

    给出N个正整数,AB两个人轮流取数,A先取。每次可以取任意多个数,直到N个数都被取走。
    每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大。
    在这样的情况下,最终A的得分减去B的得分为多少。

    Input

    第一行一个正整数N (N <= 1,000,000),第二行N个正整数(不超过10^9)。

    Output


    一个正整数,表示最终A与B的分差。

    Sample Input

    3
    1 3 1

    Sample Output

    2

    HINT

    第一次A取走3,第二次B取走两个1,最终分差为2。

    Source

     
    题解:
        自己比较脑残,想了好久,被一个1,2,3的数据卡住了,为什么答案是2呢?
        可以先选3,然后后者只能选2,1,或者1,不管怎么样,都是2
        就是可以想到是连续一段取数的,那么可以发现,所以开始取当前第i个,那么答案是a[i]-f[i-1],
        以前一起,就是f[i-1],所以取个最大之即可,最后因为A先选,所以答案为f[n]
     1 #include<cstring>
     2 #include<cmath>
     3 #include<algorithm>
     4 #include<iostream>
     5 #include<cstdio>
     6 
     7 #define N 1000007
     8 using namespace std;
     9 inline int read()
    10 {
    11     int x=0,f=1;char ch=getchar();
    12     while(ch>'9'||ch<'0'){if (ch=='-') f=-1;ch=getchar();}
    13     while(ch<='9'&&ch>='0')
    14     {
    15         x=(x<<3)+(x<<1)+ch-'0';
    16         ch=getchar();
    17     }
    18     return x*f;
    19 }
    20 
    21 int n;
    22 int a[N],f[N],MX;
    23 
    24 int main()
    25 {
    26     n=read();for (int i=1;i<=n;i++) a[i]=read();
    27     sort(a+1,a+n+1);
    28     for (int i=1;i<=n;i++)
    29         MX=max(MX,a[i]-f[i-1]),f[i]=MX;
    30     printf("%d
    ",f[n]);    
    31 }
  • 相关阅读:
    (HDOJ 2034)人见人爱AB
    (UVa 100) The 3n + 1 problem
    (HDOJ 2099)整除的尾数
    (UESTCOJ 1004)8球胜负(eight)
    asp.net中对数据库表插入null空值的问题
    利用模版生成html页
    如何取得IP/用户名等信息
    SQL SERVER的数据类型
    在IIS与.net框架中配置中把扩展名.aspx改成自定义的扩展名.mspx
    c#中什么情况下用(int)什么情况下用Convert.ToInt32?
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/8029209.html
Copyright © 2011-2022 走看看