码迷,mamicode.com
首页 > 其他好文 > 详细

[bzoj2091] [Poi2010]The Minima Game

时间:2016-06-18 18:17:04      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

  显然每次都取排序后包含最大值的连续的一段数。

  f[i]表示对于剩下的最小的i个数,先手最多比后手多多少分。

  f[i]=min{a[j+1]-f[j]}...j<i,a升序排序。

技术分享
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #define ll long long
 6 using namespace std;
 7 const int maxn=1e6+23;
 8 ll f[maxn],mx;
 9 int a[maxn];
10 int i,j,k,n,m;
11  
12 int ra;char rx;
13 inline int read(){
14     rx=getchar(),ra=0;
15     while(rx<0||rx>9)rx=getchar();
16     while(rx>=0&&rx<=9)ra*=10,ra+=rx-48,rx=getchar();return ra;
17 }
18 int main(){
19     n=read();
20     for(i=1;i<=n;i++)a[i]=read();
21     sort(a+1,a+1+n);
22     for(i=1;i<=n;i++)mx=max(mx,a[i]-f[i-1]),f[i]=mx;
23     printf("%lld\n",f[n]);
24 }
View Code

 

[bzoj2091] [Poi2010]The Minima Game

标签:

原文地址:http://www.cnblogs.com/czllgzmzl/p/5596417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!