首页 > 其他 > 详细

[bzoj2091] [Poi2010]The Minima Game

时间:2016-06-18 18:15:03      阅读:229      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!