BZOJ2281:[SDOI2011]黑白棋(博弈论,组合数学,DP)
Description
Input
Output
输出小A胜利的方案总数。答案对1000000007取模。
Sample Input
Sample Output
HINT
1<=d<=k<=n<=10000, k为偶数,k<=100。
Solution
我组合计数和$DP$真的是菜的真实……
首先这个题必须加一个限制条件:先手只能向右,后手只能向左,不然下面的做法会被黄学长找出来反例……?QAQ 不过还是能过的我也不知道为什么
首先比较容易发现,因为每个人操作的方向是一定的,所以可以把一对相邻的黑白棋中间的格子数看成一堆石子,那么这个就变成了一个有$k/2$堆的$Nim$游戏。只不过这个$Nim$游戏一次可以取$1 \sim d$堆,也就是$k-Nim$游戏。
$k-Nim$游戏的先手必败态是把每堆石子转换为二进制后,其中每一位上为1的个数和都能被$(d+1)$整除。
感性理解还是挺正确的……具体证明戳这里吧。
然后就可以开始$DP$了。设$f[i][j]$表示$DP$到了二进制的第$i$位,用了$j$个棋子的必败态方案数。
$f[i][j]= \sum f[i-1][j-l \times (d+1) \times 2^i]*C_{k/2}^{l \times (d+1)}$
(这一次用了$l \times (d+1) \times 2^i$个石子,乘组合数是因为从$k/2$堆石子里选出$k \times (d+1)$堆。)
最后答案为$C_n^k-\sum_{i=0}^{n-k}f[15][i] \times C_{n-k/2-i}^{k/2}$
(乘组合数是因为每对棋子在棋盘上的距离确定了,就差每对棋子的排列方式了。)
Code
#include<iostream>
#include<cstdio>
#define N (10009)
#define LL long long
#define MOD (1000000007)
using namespace std; LL n,k,d,p[],C[N][],f[][N]; void Init()
{
p[]=;
for (int i=; i<=; ++i) p[i]=p[i-]<<;
C[][]=;
for (int i=; i<=n; ++i)
for (int j=; j<=min(*k,(LL)i); ++j)
{
(C[i][j]+=C[i-][j])%=MOD;
if (j) (C[i][j]+=C[i-][j-])%=MOD;
}
} int main()
{
scanf("%lld%lld%lld",&n,&k,&d);
Init();
f[][]=;
for (int i=; i<=; ++i)
for (int j=; j<=n-k; ++j)
for (int l=; l*(d+)<=k/&&l*(d+)*p[i-]<=j; ++l)
(f[i][j]+=f[i-][j-l*(d+)*p[i-]]*C[k/][l*(d+)]%MOD)%=MOD;
LL ans=;
for (int i=; i<=n-k; ++i)
(ans+=f[][i]*C[n-k/-i][k/]%MOD)%=MOD;
ans=(C[n][k]-ans+MOD)%MOD;
printf("%lld\n",ans);
}
BZOJ2281:[SDOI2011]黑白棋(博弈论,组合数学,DP)的更多相关文章
- BZOJ 2281 Luogu P2490 [SDOI2011]黑白棋 (博弈论、DP计数)
怎么SDOI2011和SDOI2019的两道题这么像啊..(虽然并不完全一样) 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?i ...
- [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
2281: [Sdoi2011]黑白棋 Time Limit: 3 Sec Memory Limit: 512 MBSubmit: 626 Solved: 390[Submit][Status][ ...
- BZOJ 2281: [Sdoi2011]黑白棋 (Nim游戏+dp计数)
题意 这题目有一点问题,应该是在n个格子里有k个棋子,k是偶数.从左到右一白一黑间隔出现.有两个人不妨叫做小白和小黑.两个人轮流操作,每个人可以选 1~d 枚自己颜色的棋子,如果是白色则只能向右移动, ...
- BZOJ2281[Sdoi2011]黑白棋&BZOJ4550小奇的博弈——DP+nimk游戏
题目描述 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小A可以移动白色 ...
- BZOJ2281 [SDOI2011]黑白棋 【dp + 组合数】
题目 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小A可以移动白色棋子 ...
- bzoj2281 [Sdoi2011]黑白棋
一眼$nimk$游戏,后来觉得不对劲,看了黄学长博客发现真的不是$nimk$. 就当是$nimk$做吧,那么我们要保证每一位上一的个数都是$d+1$的倍数. $dp$:$f[i][j]$表示从低到高第 ...
- luoguP2490 [SDOI2011]黑白棋 博弈论 + 动态规划
博弈部分是自己想出来的,\(dp\)的部分最后出了点差错QAQ 从简单的情况入手 比如\(k = 2\) 如果有这样的局面:$\circ \bullet $,那么先手必输,因为不论先手怎样移动,对手都 ...
- 【BZOJ2281】[SDOI2011]黑白棋(博弈论,动态规划)
[BZOJ2281][SDOI2011]黑白棋(博弈论,动态规划) 题面 BZOJ 洛谷 题解 先看懂这题目在干什么. 首先BZOJ上面的题面没有图,换到洛谷看题就有图了. 不难发现都相邻的两个异色棋 ...
- Bzoj 2281 [Sdoi2011]黑白棋 题解
2281: [Sdoi2011]黑白棋 Time Limit: 3 Sec Memory Limit: 512 MBSubmit: 592 Solved: 362[Submit][Status][ ...
随机推荐
- PowerDesigner最基础的使用方法入门学习(转载)
来源:http://www.cnblogs.com/biehongli/p/6025954.html 1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其他的概念知识可自行学习 ...
- [Redis] redis数据备份恢复与持久化
数据库备份,使用save命令,将会在redis的安装目录中生成dump.rdb 例如:在我的目录下 redis/src/dump.rdb 使用命令config get dir,获取当前redis的安装 ...
- ef和mysql使用(二)--让mysql支持EntityFramework.Extended实现批量更新和删除
我们都知道Entity Framework 中不能同时更新多条记录,但是一个老外写的扩展库可以实现此功能EntityFramework.Extended,但是如何是mysql数据库要怎么实现呢 首先实 ...
- CSS-带尖角的对话框
效果图: box1的代码: .box{ position: relative; width: 200px; height: 200px; border: 2px solid #000; backgro ...
- vue项目中引入bootstrap
(1)引入Jquery文件,需要在bootstrap.min.js 之前引入. 1.npm install jquery --save-dev 2. plugins: [ new webpack.Pr ...
- Docker for Windows(三)Docker镜像与容器的区别&常用命令
Docker镜像(Image)是一堆只读文件(read-only layer),容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是 ...
- flutter开发中常用的dart插件
flutter插件官网地址:https://pub.dartlang.org/packages/ 1. image_picker 一个可以从图库选择图片,并可以用相机拍摄新照片的flutter插件 2 ...
- C语言中的逗号表达式
转载:http://www.cnblogs.com/hnrainll/archive/2011/08/03/2126660.html C语言提供一种特殊的运算符——逗号运算符.用它将两个表达式连接起来 ...
- statistical thinking in Python EDA
Histgram直方图适合于单个变量的value分布图形 seaborn在matplotlib基础上做了更高层的抽象,方便对基础的图表绘制.也可以继续使用matplotlib直接绘图,但是调用seab ...
- [翻译] SIAlertView
SIAlertView https://github.com/Sumi-Interactive/SIAlertView An UIAlertView replacement with block sy ...