bzoj2091[Poi2010]The Minima Game DP
2017-10-16 08:55
357 查看
题意:给出N个正整数,AB两个人轮流取数,A先取。每次可以取任意多个数,直到N个数都被取走。
每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大。
在这样的情况下,最终A的得分减去B的得分为多少。
原谅我见识短浅还没见过这种操作= =。
首先把N个数从小到大排序,使得我选取多个数肯定是一段区间。
设f[i]表示选取前i个数的时候,最大差是多少。
f[i]=max(mx,a[i]−f[i−1])
mx线性维护。
每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大。
在这样的情况下,最终A的得分减去B的得分为多少。
原谅我见识短浅还没见过这种操作= =。
首先把N个数从小到大排序,使得我选取多个数肯定是一段区间。
设f[i]表示选取前i个数的时候,最大差是多少。
f[i]=max(mx,a[i]−f[i−1])
mx线性维护。
#include<cstdio> #include<algorithm> #include<cstring> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) using namespace std; const int N=1e6+5; int n,m,k; int a ,f ; int main() { scanf("%d",&n); fo(i,1,n)scanf("%d",&a[i]); sort(a+1,a+1+n); int mx=0; fo(i,1,n) { mx=max(mx,a[i]-f[i-1]); f[i]=mx; } printf("%d\n",f ); }
相关文章推荐
- bzoj 2091: [Poi2010]The Minima Game【博弈论+贪心+dp】
- 【bzoj2091】【Poi2010】【The Minima Game】【dp】
- bzoj2091[Poi2010]The Minima Game DP
- 【bzoj2091】[Poi2010]The Minima Game dp
- 【bzoj2091】[Poi2010]The Minima Game
- bzoj 2091: [Poi2010]The Minima Game 动态规划
- BZOJ2091[Poi2010] The Minima Game
- BZOJ2091: [Poi2010]The Minima Game
- BZOJ 2091 Poi2010 The Minima Game 动态规划
- [bzoj2091] [Poi2010]The Minima Game
- BZOJ 2091 [Poi2010]The Minima Game
- bzoj2091【Poi2010】The Minima Game
- 【POI2010】【BZOJ2091】The Minima Game
- 【bzoj2091】 [Poi2010]The Minima Game
- BZOJ2091: [Poi2010]The Minima Game
- 2091: [Poi2010]The Minima Game
- BZOJ P2091[Poi2010]The Minima Game
- BZOJ2091: [Poi2010]The Minima Game
- BZOJ2091: [Poi2010]The Minima Game
- [POI2010]GRA-The Minima Game