BZOJ2091: [Poi2010]The Minima Game

来源:互联网 发布:c语言for循环打印图形 编辑:程序博客网 时间:2024/06/05 05:59

2091: [Poi2010]The Minima Game

Time Limit: 10 Sec  Memory Limit: 259 MB
Submit: 577  Solved: 392
[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

鸣谢 JZP

[Submit][Status][Discuss]

题解:维护一个******其实我也不咋会 好像是个dp 因为题中两个同学都很聪明,但我很sb啊他们每次都会选择最利于自己的情况,所以符合最优子结构,可以做dpQAQ

贴上代码:

#include<bits/stdc++.h>#define M 1000010#define ll long longconst int INF = 0x7fffffff;const double eps = 1e-5;using namespace std;int read(){int x = 0 , f = 1; char ch = getchar();while(ch<'0'||ch>'9') {if(ch=='-')f*=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}return x * f;}int a[M],f[M];int main(){int n = read();for(int i = 1 ; i <= n ; i++)a[i] = read();1sort(a+1,a+1+n);int mx=a[1];for(int i = 1; i <= n ;++i)mx=max(mx,a[i+1]-mx);printf("%d",mx);return 0;}


原创粉丝点击