[CF859C] Pie Rules - dp,博弈论】的更多相关文章

有一个长度为n的序列,Alice和Bob在玩游戏.Bob先手掌握决策权. 他们从左向右扫整个序列,在任意时刻,拥有决策权的人有如下两个选择: 将当前的数加到自己的得分中,并将决策权给对方,对方将获得下一个数的决策权 将当前的数加到对方的得分中,并将决策权保留给自己,自己将获得下一个数的决策权 假定他们都使用最优策略,求他们最后分别能获得多少分 Solution 考虑到无后效性,令 \(f[i][0/1]\) 表示 0/1 处理完了前 \(i\) 个数,先手和后手得分的差 转移即枚举上一次的位置…
https://www.luogu.org/problemnew/show/CF859C Description 有一个长度为\(n\)的序列,Alice和Bob在玩游戏.Bob先手掌握决策权. 他们从左向右扫整个序列,在任意时刻,拥有决策权的人有如下两个选择: 将当前的数加到自己的得分中,并将决策权给对方,对方将获得下一个数的决策权 将当前的数加到对方的得分中,并将决策权保留给自己,自己将获得下一个数的决策权 假定他们都使用最优策略,求他们最后分别能获得多少分 Input 第一行是一个整数\(…
题意:有 nnn 个物品,每个物品有不同的价值,物品按顺序分给两个人,有一块令牌,每回合拥有令牌的人拥有物品的分配权,但是该回合未获得物品的那个人会在下回合获得令牌,开始令牌在Bob手里,两个人都采取最优的策略,问最后各能获得的最大价值是多少. 我们设状态 dp[i]dp[i]dp[i] 为轮到第 iii 个物品时拥有令牌所能获得的最大值. 如果正着进行求解会有些困难,我们不妨考虑逆着求解: 1.取当前的价值,那说明在上一回合中是不能有令牌的,即 dp[i]=sum[i+1]−dp[i+1]+v…
859C - Pie Rules 思路: dp 我们知道无论谁拿到decider token他拿不拿蛋糕都是确定的,都是使自己最优的结果. 于是 定义状态:dp[i]表示到第i个位置拿到decider token的人能使自己拿到的最大的值 初始状态:dp[n]=a[n] 目标状态:dp[1] 状态转移:dp[i]=max(dp[i+1],sum[i+1]-dp[i+1]+a[i])(sum[i]表示后缀和) 代码: #include<bits/stdc++.h> using namespace…
题目描述 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为“Xoinc”的两人硬币游戏. 初始时,一个有N(5 <= N <= 2,000)枚硬币的堆栈放在地上,从堆顶数起的第I枚硬币的币值为C_i (1 <= C_i <= 100,000). 开始玩游戏时,第一个玩家可以从堆顶拿走一枚或两枚硬币.如果第一个玩家只拿走堆顶的一枚硬币,那么第二个玩家可以拿走随后的一枚或两枚硬币.如果第一个玩家拿走两枚硬币,则第二个玩家可以拿走1,2,3,或4枚硬币.在每一轮中,当前的玩家至少拿走一…
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You may have heard of the pie rule before. It states that if two people wish to fairly share a slice of pie, one person should cut the slice…
2318: Spoj4060 game with probability Problem Description Alice和Bob在玩一个游戏.有n个石子在这里,Alice和Bob轮流投掷硬币,如果正面朝上,则从n个石子中取出一个石子,否则不做任何事.取到最后一颗石子的人胜利.Alice在投掷硬币时有p的概率投掷出他想投的一面,同样,Bob有q的概率投掷出他相投的一面. 现在Alice先手投掷硬币,假设他们都想赢得游戏,问你Alice胜利的概率为多少. Input 第一行一个正整数t,表示数据…
C. Pie or die Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55/problem/C Description Volodya and Vlad play the following game. There are k pies at the cells of n  ×  m board. Each turn Volodya moves one pie to the neighbo…
题目链接:http://poj.org/problem?id=3311 题目大意:一个送披萨的,每次送外卖不超过10个地方,给你这些地方之间的时间,求送完外卖回到店里的总时间最小. Sample Input 3 0 1 10 10 1 0 1 2 10 1 0 10 10 2 10 0 0 Sample Output 8 分析:dp[i][j]:表示在i状态(用二进制表示城市有没有经过)时最后到达j城市的最小时间,转移方程:dp[i][j]=min(dp[i][k]+d[k][j],dp[i][…
Floyd + 状态DP Watashi的板子 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int INF = (int) 1e8; <<][]; //dp[S][v] 表示还需访问的集合为S, 现在在v点 ][]; int n; void floyd() { ; k <= n…
[链接]h在这里写链接 [题意] 在这里写题意 [题解]     dp[i][0] 第i个位置,bob没有决策权     dp[i][1] 第i个位置,bob有决策权     dp[n][0] = 0;     dp[n][1] = a[n];     for (int i = n-1;i >= 1;i--){         dp[i][1] = max(a[i]+dp[i+1][0],dp[i+1][1]);         if (a[i] + dp[i+1][0]<dp[i+1][1]…
题目链接 题意 : 给出 N 个数.然后问你最多取出多少石子使得在 NIM 博弈中.后手必胜 分析 :  Nim 博弈模型,后手必胜当且仅当各个堆的石子的数目的异或和为 0 转化一下.变成最少取多少石子使得异或和为原来所有石子堆的异或和 和背包DP思想很类似.可以考虑 DP dp[i][j] = 到第 i 个石子为止.使得异或和为 j 的最少取石子方案是多少 但是如果这样子去构造 dp 转移显然是 O(n^2) 的 如果你接触过 FWT 优化 DP 的题目的话.可能会想到如下的 DP 方程 dp…
题面 一道需要一定思考的 \(\text{DP}\) . 设 \(dp_i\) 表示第 \(i\) 步走的人能得到的最大分数, \(sum_i\) 表示 \(\sum_{j=i}^n a_j\) ,即 \(sum_i\) 为序列 \(\{a_i\}\) 的后缀和. 状态转移方程: \(dp_i=\max\{dp_{i+1}, sum_{i+1}-dp_{i+1}+a_i\}\) . 解释一下: \(dp_{i+1}\) 的意思是第 \(i+1\) 个决策的人将 \(a_{i+1}\) 给了对方,…
正题 题目链接:https://www.luogu.com.cn/problem/P3507 题目大意 \(n\)个数,没人轮流取若干个并获得取走的数中最小数的权值,两人的目标都是自己的权值\(-\)对方的权值最大,求先手的权值\(-\)后手的权值. 解题思路 肯定是从大往小取,所以我们从小往大\(dp\). 设\(f_{i,0/1}\)表示取了前\(i\)个,最后一步是先/后手. 然后有\(f_{i,0}=max\{f_{j,1}+a_{j+1}\}(j<i),f_{i,1}=min\{f_{…
传送门 解题思路 首先发现可以把相邻的黑白棋子之间的距离看成一堆棋子,那么这个就可以抽象成\(Nim\)游戏每次可以取\(d\)堆这个游戏,而这个游戏的\(SG\)值为\(x\%(d+1)\),那么题目其实就是求所有石子的异或和\(\%d=0\)的方案数.可以设\(f[i][j]\)表示二进制下前\(i\)位\(\%d\)都为\(0\),一共用了\(j\)个石子,转移时可以枚举当前这一位\(/d\)为多少,然后再乘组合数更新答案,最后用总数\(-\)不合法方案即可. 代码 #include<io…
给出N个正整数,AB两个人轮流取数,A先取.每次可以取任意多个数,直到N个数都被取走.每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大.在这样的情况下,最终A的得分减去B的得分为多少. 引理 先手一定从大到小取若干个连续的数 倒过来考虑,设 \(f[i]\) 表示取完了从小到大的前 \(i\) 个数,当前局面下先手减去后手的最大值 显然有 \(f[i] = Max(a[j]-f[j-1])\) 这样暴力转移是 \(O(n^2)\) 的,考虑优化 观察这个转…
一般的入门顺序: 0. C语言的基本语法(或者直接开C++也行,当一个java选手可能会更受欢迎,并且以后工作好找,但是难度有点大),[参考书籍:刘汝佳的<算法竞赛入门经典>,C++入门可以考虑<c++ primer plus>,java选手可以考虑<think in java>or中文版<java编程思想>,请远离谭浩强...]可以选择切一些特别水的题巩固以及适应一下ACM中常见的输入输出格式...例如杭电著名的100题 Problem Set1. 一些基…
[算法]区间DP+博弈论 [题解]其实它都不是博弈题…… 很自然的可以设f[i][j]表示i~j先手可取得的最大价值. 容易得到转移式:f[i][j]=max(a[i]+sum[i+1~j]-f[i+1][j],a[j]+sum[i~j-1]-f[i][j-1]). 化简得到f[i][j]=sum[i~j]-min(f[i+1][j],f[i][j-1]). 然后预处理前缀和,按区间从小到大做即可. #include<cstdio> #include<cstring> #inclu…
纸牌游戏 #include<iostream> #include<cstdio> #include<ctime> #include<cstdlib> #define maxn 301 using namespace std; int n,a[maxn],q[maxn],cnt[maxn]; long long sz[maxn]; bool vis[maxn]; int gcd(int x,int y){ )return x; else return gcd(…
http://acm.hdu.edu.cn/showproblem.php?pid=1176 参考自:http://blog.csdn.net/xcszbdnl/article/details/7876283 可将所有的时间段和馅饼看成是一个矩阵,时间就是行数,掉馅饼的就是列数,则就是数字三角形问题,从最底层找一条路径,使得路径上的和最大. 状态转移方程为:dp[i][j]=max(dp[i+1][j-1],dp[i+1][j],dp[i+1][j-1])+pie[i][j].pie[i][j]…
以下是OI省选前的数据结构与算法整理,可能还不是很全面.但是已经是全网相对比较全面的了.所有标记为“基础”“进阶”“中级”“提高”的知识为近些年来NOIp考察的内容,需重点掌握. 所有“高级”部分为NOI的考点,省选需要. 不分条的知识点则是省选知识点. 其他的一些算法和数据结构可能就太小众了,就参见Candy?或_rqy的博客,以及TopCoder等网站的教程吧. 每一小项前面的方括号是Markdown里面的checkbox,然而并不能用.悲し. Coder必备类 [ ] LaTeX [ ]…
T1 Description 被污染的灰灰草原上有羊和狼.有N只动物围成一圈,每只动物是羊或狼. 该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x+1,x+K]区间的整数,游戏按顺时针方向进行.每只动物报的数字都不能超过M.若一只动物报了M这个数,它所在的种族就输了.问以第i只动物为游戏的开始,最后哪种动物会赢? Input 第一行输入三个正整数N,M,K. 接下来一行N个正整数,分别表示N只动物的种类,以顺时针的方向给出.0代表羊,1代表狼.…
Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3160   Accepted: 1613 Description The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as possible. Unfortunately, due to cutbacks, they can affo…
Pie Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 895    Accepted Submission(s): 246 Problem Description A lot of boys and girls come to our company to pie friends. After we get their informa…
dp , dp[ i ][ j ] = max( dp[ k ][ j - 1 ] ) + G[ i ][ j ] ( i - 1 <= k <= i + 1 , dp[ k ][ j - 1 ] > 0 ) 一开始没注意到要 dp[ k ][ j - 1 ] > 0 才能取 , 然后就WA 了2次... -------------------------------------------------------------------------- #include<cs…
题目大意 不会博弈论的 yww 在和博弈论大师 yxq 玩一个游戏. 有 \(n\) 种卡牌,第 \(i\) 种卡牌有 \(b_i\) 张. yww 会先把所有 \(B=\sum_{i=1}^nb_i\) 张卡分成两堆,每堆 \(\frac{B}{2}\) 张.保证 \(B\) 是偶数. 他们会轮流从第一堆中取卡牌,每次取一张,yww 先取,直到取完为止. 然后他们会轮流从第二堆中取卡牌,每次取一张,yxq 先取,直到取完为止. 取完卡牌后,他们会计算自己的得分.假设某人在某一堆中取了 \(x\…
链接:https://ac.nowcoder.com/acm/contest/338/I 来源:牛客网 题目描述 IG won the S championship and many people are excited, ii and gg are no exception. After watching the game, the two of them also want to play a game. There is now an infinite chessboard with on…
传送门 题意简述:m个石子,有两个队每队n个人循环取,每个人每次取石子有数量限制,取最后一块的输,问先手能否获胜. 博弈论+dp. 我们令f[i][j]f[i][j]f[i][j]表示当前第i个人取石子,石子还剩下j个时能否获胜. 显然如果有取法让轮到第(i+1)(i+1)(i+1) modmodmod 2n2n2n 个人有必败状态,那么的当前就是必胜状态. 再令k=(i+1)k=(i+1)k=(i+1) modmodmod 2n2n2n 于是f[i][j]=f[k][j−1]∣f[k][j−2…
Solution 几乎是秒想到的水题叻! 异或很容易想到每一位单独做贡献,所以我们需要统计的是区间内每一位上做的贡献,就是统计区间内每一位是1的数的数量. 所以就写数位dp辣!(昨天才做了数字统计不要太作弊啊!) Code #include<bits/stdc++.h> #define LL long long #define mod 1000000007 using namespace std; inline void read(LL &x) { x = ; char ch = ge…
题目描述 给出 $n$ 和 $m$ ,$m$ 次询问.每次询问给出 $a$ 和 $b$ ,两人轮流选择:将 $a$ 加一或者将 $b$ 加一,但必须保证 $a^b\le n$ ,无法操作者输,问先手是否必胜. $n\le 10^9$ ,$m\le 10^5$ ,$a\ge 2$ ,$b\ge 1$ ,$a^b\le n$ 题解 博弈论+dp 显然可以想到预处理 $f[i][j]$ 表示 $a$ 为 $i$ ,$b$ 为 $j$ 时先手能否胜利.显然由 $f[i+1][j]$ 和 $f[i][j+…