[POI2010]GRA-The Minima Game

OJ题号:洛谷3507

如果选了$k_i$,那么你的对手就可以选上所有$\geq{k_i}$的数。那么他其中获得的分数也一定$\geq{k_i}$。

如果你选了$k_i$以及所有$\geq{k_i}$的数,那么对手无论怎么选,所获得的分数都一定$<{k_i}$,无论如何都不会超过你。

因此,若要保证最优,如果选了$k_i$,同时一定要选上所有$\geq{k_i}$的数。

我们可以将这n个数从小到大排序。

设${k_0}\sim{k_i}$中,双方最大差为$f_i$。易得DP方程$f_i=max(k_j-f_{j-1})(0\leq{j}\le{i})$。

实现上也可以用$ans$维护$f$数组的前缀$max$。

 1 #include<cstdio>
 2 #include<algorithm>
 3 int main() {
 4     int n;
 5     scanf("%d",&n);
 6     int k[n];
 7     for(int i=0;i<n;i++) scanf("%d",&k[i]);
 8     std::sort(&k[0],&k[n]);
 9     int ans=0;
10     for(int i=0;i<n;i++) ans=std::max(ans,k[i]-ans);
11     printf("%d\n",ans);
12     return 0;
13 }
时间: 2024-10-24 08:39:42

[POI2010]GRA-The Minima Game的相关文章

bzoj2091【Poi2010】The Minima Game

直接dp就好了 每个人肯定会去选最大的,用dp[i]表示选了后i个点时先手-后手的最大值(因为从后往前扫才好转移啊 QwQ~) dp[i]=max(c[j]-dp[j-1]),(j<=i) 直接维护max值就好了~ #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; const int Mx=1000010; int

luoguP3507 [POI2010]GRA 性质 + 动态规划

题目大意: 给定\(n\)个正整数,\(a, b\)两个人轮流取,\(a\)先手 每次可以取任意多的数,直到取完,每次的得分为取的数中的最小值 \(a, b\)都会使自己的得分减去对手的得分更大,询问最后\(a\)的得分减去\(b\)的得分的大小 先考虑排序 排完序之后,先手一定取连续的一段 如果不取完,那么后手有更多的选择空间(可以选择大数或者带着大数选前面的区间) 设\(f[i]\)表示\(1 \sim i\)中先手取比后手取多的最大值 那么有\(f[i] = max(-f[j] + a[j

波兰题目补全计划

Introduce 本人比较喜欢做波兰的题目,感觉这些题目十分清真,思维也比较好.欢迎同样喜欢波兰题目的OIer来交流.以下是我有记录地刷过的题目. 比较好的题吧:BZOJ #3746.[POI2015]Czarnoksi??nicy okr?g?ego sto?u source:XXII OI - Etap I - Zadanie Czarnoksi??nicy okr?g?ego sto?u notes: 动态规划我的题解http://www.cnblogs.com/TSHugh/p/882

洛谷 P3507 [POI2010]GRA-The Minima Game

P3507 [POI2010]GRA-The Minima Game 题目描述 Alice and Bob learned the minima game, which they like very much, recently. The rules of the game are as follows. A certain number of cards lies on a table, each inscribed with a positive integer. The players m

BZOJ2091: [Poi2010]The Minima Game

2091: [Poi2010]The Minima Game Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 243  Solved: 163[Submit][Status] Description 给出N个正整数,AB两个人轮流取数,A先取.每次可以取任意多个数,直到N个数都被取走.每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大.在这样的情况下,最终A的得分减去B的得分为多少. Input 第一行一个正整

P3507 [POI2010]GRA-The Minima Game

题目描述 Alice and Bob learned the minima game, which they like very much, recently. The rules of the game are as follows. A certain number of cards lies on a table, each inscribed with a positive integer. The players make alternate moves, Alice making t

BZOJ 2091: [Poi2010]The Minima Game

Description 每次可以任取数字,使用最优策略让差最大. Sol DP. 一开始我写了个单调队列贪心,然后狂WA不止... 正着做有后效性,因为前面的决策无法保证在后面是最优秀的,但如果倒这做就没有后效性了..感觉倒着做这种想法总是容易忽略,它对前面的影响应该多考虑一下. 然后DP就可以了...比较简单的DP.. Code /************************************************************** Problem: 2091 User:

BZOJ 2091 Poi2010 The Minima Game 动态规划

题目大意:给定n个数,两个人轮流取,每次可以取走任意一些数,获得的分值是这些数中的最小值 两个人都想让自己的分值-对方的分值最大,求最终先手得分-后手得分 显然每个人取走的都是当前剩下的数中最大的一些数 那么考虑倒着做,令fi表示剩余最小的i个数时先手-后手的最大差值 那么有DP方程fi=max{aj+1?fj}(0≤j<i) 维护个最大值就行了 #include <cstdio> #include <cstring> #include <iostream> #i

[POI2010] GRA-The Minima Game - 贪心,dp,博弈论

给出N个正整数,AB两个人轮流取数,A先取.每次可以取任意多个数,直到N个数都被取走.每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大.在这样的情况下,最终A的得分减去B的得分为多少. 引理 先手一定从大到小取若干个连续的数 倒过来考虑,设 \(f[i]\) 表示取完了从小到大的前 \(i\) 个数,当前局面下先手减去后手的最大值 显然有 \(f[i] = Max(a[j]-f[j-1])\) 这样暴力转移是 \(O(n^2)\) 的,考虑优化 观察这个转