4550: 小奇的博弈

Time Limit: 2 Sec  Memory Limit: 256 MB
Submit: 68  Solved: 42
[Submit][Status][Discuss]

Description

这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色。最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同。
小奇可以移动白色棋子,提比可以移动黑色的棋子,它们每次操作可以移动1到d个棋子。每当移动某一个棋子时,这个棋子不能跨越两边的棋子,当然也不可以出界。当谁不可以操作时,谁就失败了。小奇和提比轮流操作,现在小奇先移动,有多少种初始棋子的布局会使它有必胜策略?

Input

共一行,三个数,n,k,d。对于100%的数据,有1<=d<=k<=n<=10000, k为偶数,k<=100。

Output

输出小奇胜利的方案总数。答案对1000000007取模。

Sample Input

10 4 2

Sample Output

182

这题目题面有问题,少了一句话:白棋不能往左移,黑棋不能往右移

这样的划就可以将问题转成Nimk博弈了:

有k/2堆石子,第i堆石子的个数是从左往右第i个白棋与第i个黑棋之间的距离

每个人每次可以从最多d堆石子中取任意数量的石子(相当于最多将d个白/黑棋向右/向左移动)

谁先取完谁就赢了,求是否必胜

这是经典的Nimk问题,将每堆石子数量拆成二进制,再将二进制每一位单独相加,如果所有位的和都是(d+1)的倍数则先手必败,否则先手必胜

而这题不是让你判断是否必胜,是让你判断有多少种情况

因为有n个位置,放k个棋子,所有总共有n-k个空位,也就相当于求有k/2堆石子,石子总数<=n-k的必胜局面个数

(为什么是<=,而不是=,因为最两侧的黑棋白棋不一定靠边)

这样问题就彻底转化了,先求出所有必败态,然后拿总情况数C(n, k)减去它就是答案了

dp[i][j]表示目前石子数量的二进制最高位不超过第i位,总石子数为j的必败方案数,那么有递推

dp[i+1][j+x*(d+1)*(2^i)] += dp[i][j]*C(k/2, x*(d+1))

最后答案就是C(n, k)-∑dp[maxh][i]*C(n-i-k+k/2, k/2)    (0<=i<=n-k)

#include<stdio.h>
#include<string.h>
#define mod 1000000007
#define LL long long
LL C[10005][105], dp[18][10005], er[18] = {1};
int main(void)
{LL i, j, n, k, d, x, ans;for(i=0;i<=10000;i++)C[i][0] = 1;for(i=1;i<=15;i++)er[i] = er[i-1]*2;for(i=1;i<=10000;i++){for(j=1;j<=100;j++)C[i][j] = (C[i-1][j]+C[i-1][j-1])%mod;}while(scanf("%lld%lld%lld", &n, &k, &d)!=EOF){memset(dp, 0, sizeof(dp));dp[0][0] = 1;for(i=0;i<=15;i++){for(j=0;j<=n-k;j++){dp[i+1][j] = (dp[i+1][j]+dp[i][j])%mod;for(x=1;x*(d+1)*er[i]+j<=n-k&&x*(d+1)<=k/2;x++)               //总石子数不能超过n-m,并且第i位二进制为1的石子堆数不能超过总堆数dp[i+1][j+x*(d+1)*er[i]] = (dp[i+1][j+x*(d+1)*er[i]]+dp[i][j]*C[k/2][x*(d+1)]%mod)%mod;}}ans = 0;for(i=0;i<=n-k;i++)ans = (ans+dp[15][i]*C[n-i-k/2][k/2])%mod;printf("%lld\n", ((C[n][k]-ans)%mod+mod)%mod);}return 0;
}

bzoj 2281: [Sdoi2011]黑白棋 bzoj 4550: 小奇的博弈(Nimk博弈+DP)相关推荐

  1. [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)

    2281: [Sdoi2011]黑白棋 Time Limit: 3 Sec  Memory Limit: 512 MB Submit: 626  Solved: 390 [Submit][Status ...

  2. BZOJ 2281 Luogu P2490 [SDOI2011]黑白棋 (博弈论、DP计数)

    怎么SDOI2011和SDOI2019的两道题这么像啊..(虽然并不完全一样) 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?i ...

  3. BZOJ2281:[SDOI2011]黑白棋(博弈论,组合数学,DP)

    Description 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小 ...

  4. bzoj 4711 小奇挖矿 ——“承诺”类树形dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4711 对"承诺"有了更深的了解. 向外和向内要区分,所以 f [ i ] ...

  5. 【bzoj2281】[Sdoi2011]黑白棋

    博弈论---Nimk问题. dp再搞搞. 很容易看出,该游戏的终态是每两个棋子都紧靠着.当一颗棋子移动,另一方与该棋子对应的那一刻可以立即追上,使得仍旧紧靠,最终棋子动弹不得,游戏结束. 还能看出,对 ...

  6. [Python] 黑白棋(翻转棋)小游戏

    [Python] 黑白棋(翻转棋)小游戏 游戏介绍 黑白棋(Reversi or Othello)在西方和日本很流行.游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负. 规则 黑白棋的每颗 ...

  7. Bzoj 4548: 小奇的糖果(双向链表+排序+树状数组)

    以下内容来自ShallWe's Blog 题目 4548: 小奇的糖果 Description 有\(N\)个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能 ...

  8. UOJ #131 BZOJ 4199 luogu P2178【NOI2015】品酒大会 (后缀自动机、树形DP)

    UOJ #131 BZOJ 4199 luogu P2178[NOI2015]品酒大会 (后缀自动机.树形DP) 水是水,但是写出了不少问题,因此写一发博客. https://www.luogu.or ...

  9. android 双人黑白棋开发博客,黑白棋 - 软件资讯 - 课堂党年级博客

    黑白棋叫反棋(Reversi).奥赛罗棋(Othello)苹棋翻转棋黑白棋西本流行游戏通相互翻转棋棋盘谁棋判断胜负 黑白棋棋盘8*8格棋盘棋棋空格间像围棋交叉点始棋盘两白两黑四棋交叉放置黑棋总先 自颜 ...

最新文章

  1. 用Python解“爬动的蠕虫”题
  2. python基础教程第二版答案-《Python基础教程》(第2版修订版)中要注意的地方...
  3. java 哈希算法_选择Java密码算法第1部分-哈希
  4. 【模式识别】特征评价和可分性判据实验报告及MATLAB仿真
  5. linux 命令分类,常用linux 命令分类整理(篇一)
  6. 成吉思汗:意志征服世界——读书笔记
  7. C# SetCursorPos用法
  8. 水泵综合性能测试系统软件,水泵综合性能测试系统
  9. CSDN 博客版块问题解决日志
  10. 小米3g刷高格固件_高恪可刷机型清单
  11. 我的团长我的团第十六集
  12. 查看电脑的开关机记录
  13. 网吧服务器怎么加无线路由器,网吧路由器怎么设置 网吧路由器设置方法【详细步骤】...
  14. 学习笔记 | 演化简单的程序用于玩 Atari 游戏
  15. ReentrantReadWriteLock——读写锁如何升级,为何读写锁不能插队?
  16. 路由器工作模式模式分类及简介
  17. win10电脑连接投影仪怎样设置,有相关教程吗
  18. 艾伟_转载:简单的自动更新程序实现
  19. 常见的ftp工具有哪些,分享8款常见的ftp工具
  20. WGS84与Web Mercator

热门文章

  1. python能做什么-python都能干什么用
  2. python安装后如何使用-python运行环境,python安装后如何使用
  3. python直方图解释,请用Python详细解释二维直方图
  4. 综合评价模型的缺点_【必备】目标检测中的评价指标有哪些?
  5. 前端面试知识点归纳:vue,react,webpack,bable,项目开发
  6. 安装Docker Desktop报错WSL 2 installation is incomplete
  7. EasyUI可编辑列
  8. msclass 文字滚动_MSClass (通用不间断滚动JS封装类)
  9. 【2021牛客暑期多校训练营5】Double Strings(二维字符串dp)
  10. 【2021牛客暑期多校训练营5】Jewels(建图,最小匹配权,KM乱搞)