[CodeForces - 712D]Memory and Scores (DP 或者 生成函数)
题目大意:
两个人玩取数游戏,第一个人分数一开始是a,第二个分数一开始是b,接下来t轮,每轮两人都选择一个[-k,k]范围内的整数,加到自己的分数里,求有多少种情况使得t轮结束后a的分数比b高。 (1 ≤ a, b ≤ 100, 1 ≤ k ≤ 1000, 1 ≤ t ≤ 100)
1.我一开始的想法是DP出玩i轮得分是j的方案数。然后状态数最多有t*(2*k*t)那么多,最坏情况下会有2e7那么多的状态,转移必须是O(1)的。
dp[i][j]=sum(dp[i-1][j-k....j+k])用个前缀和维护即可。 最后求答案的时候傻逼了,觉得必须枚举最后两人的得分,就放弃了这个做法。后来看了别人的题解,其实只要枚举第一个人的最后得分,那么第二个人可行的得分是连续的一段区间,也可以用前缀和来优化。 以上记为方法一。 时间复杂度O(k*t2)
2.方法二:一个重要的转化,原题等价于一个人一开始得分是a-b,然后玩2*t轮,最后得分要求大于0的方案数。 然后就和方法一一样了。
3.方法三:利用生成函数。观察可知 $(\frac{1+x+x^2+x^3+\cdots+x^{2k}}{x^k})^{2t}$次数大于0的项的系数和即为答案。 我们只要求出分子$(1+x+x^2+x^3+\cdots+x^{2k})^{2t}$的所有次数大于$2kt$的项的系数和即可。
我们可以把分子变形:
\begin{equation}
\begin{array}{rcl}
(1+x+x^2+x^3+\cdots+x^{2k})^{2t}&=&(1-x^{2k+1})^{2t}(\frac{1}{1-x})^{2t}\\
&=&\sum_{i=0}^{2t}C_{_{2t}}^{^i}(-1)^{i}x^{(2k+1)i} \sum_{j=0}^{\infty}C_{_{2t-1+j}}^{^{2t-1}}\ \ \ \ x^j
\end{array}
\end{equation}
(1+x+x2+⋯+x2k)2t=(1−x2k+11−x)2t=(1−x2k+1)2t×1(1−x)2t=(1−x2k+1)2t×(1+x+x2+x3+x4+⋯)2t
[CodeForces - 712D]Memory and Scores (DP 或者 生成函数)的更多相关文章
- CodeForces 712D Memory and Scores
$dp$,前缀和. 记$dp[i][j]$表示$i$轮结束之后,两人差值为$j$的方案数. 转移很容易想到,但是转移的复杂度是$O(2*k)$的,需要优化,观察一下可以发现可以用过前缀和来优化. 我把 ...
- Codeforces Round #370 (Div. 2) D. Memory and Scores DP
D. Memory and Scores Memory and his friend Lexa are competing to get higher score in one popular c ...
- Codeforces 712 D. Memory and Scores (DP+滚动数组+前缀和优化)
题目链接:http://codeforces.com/contest/712/problem/D A初始有一个分数a,B初始有一个分数b,有t轮比赛,每次比赛都可以取[-k, k]之间的数,问你最后A ...
- Codeforces Round #370 (Div. 2) D. Memory and Scores 动态规划
D. Memory and Scores 题目连接: http://codeforces.com/contest/712/problem/D Description Memory and his fr ...
- [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)
[BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...
- [Codeforces712D] Memory and Scores(DP+前缀和优化)(不用单调队列)
[Codeforces712D] Memory and Scores(DP+前缀和优化)(不用单调队列) 题面 两个人玩游戏,共进行t轮,每人每轮从[-k,k]中选出一个数字,将其加到自己的总分中.已 ...
- Memory and Scores
Memory and Scores 题目链接:http://codeforces.com/contest/712/problem/D dp 因为每轮Memory和Lexa能取的都在[-k,k],也就是 ...
- 【26.87%】【codeforces 712D】Memory and Scores
time limit per test2 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...
- Codeforces 438E The Child and Binary Tree [DP,生成函数,NTT]
洛谷 Codeforces 思路 看到计数和\(998244353\),可以感觉到这是一个DP+生成函数+NTT的题. 设\(s_i\)表示\(i\)是否在集合中,\(A\)为\(s\)的生成函数,即 ...
随机推荐
- Python3基础 创建一个空列表,一个空元组
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- Qt 设计师手册
Qt设计师(Qt Designer)是使用Qt部件(Widgets)设计和使用图形用户界面(GUI)的工具.它允许我们以所见即所得的方式构建和定制自己的窗口(Windows)或对话框(Dialogs) ...
- kali4.0 安装32位库
一.前情提要: OS:Kali4.0 64bit 二.安装32位库: 错误方法:sudo apt-get install lib6-i386 正确方法如下: 1.先以root用户身份登陆: su ro ...
- 1012. The Best Rank (25)
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- [地图SkyLine二次开发]关于IE内存限制问题(1G)
相信很多人也遇到过同样的问题,地图加载中,IE占用的内存一直增加,到了1G多一些的时候,IE就崩溃了. 在网上查阅了一番,有很多结果,下面归纳一下: a).64bit的IE最多可达到4G的内存,但Sk ...
- 被滥用的for in循环
众所周知,javascript中有两种for循环,一种是: var a=['this','is','a','article'], i, len; for( i = 0,len = a.length;i ...
- iOS runtime 知识点整理
// ------ 动态创建类, 添加成员变量, 赋值并调用动态添加的方法 ------- @implementation ViewController - (void)viewDidLoad { [ ...
- go排序
补注: 近来又看 go 的排序, 发现以前对 go 的排序理解的有点浅了. go 的排序思路和 c 和 c++ 有些差别. c 默认是对数组进行排序, c++ 是对一个序列进行排序, go 则更宽泛一 ...
- EasyUI的combobox控件使用onchange 问题
在项目中几次都遇到了同样的问题,现在都不知道怎样解决了! 路过的朋友们帮我看看嘛!谢谢了! 最后我想要实现的效果是这样的. 在下拉列表中不存在值.(这里的是下拉列表中存在值的!) 但是在我输入值 ...
- imadjust从用法到原理—Matlab灰度变换函数之一
imadjust从用法到原理-Matlab灰度变换函数之一 转摘网址:http://blog.sina.com.cn/s/blog_14d1511ee0102ww6s.html imadjust函数是 ...