【BZOJ2281】【博弈论+DP】 [Sdoi2011]黑白棋
Description

Input
Output
Sample Input
Sample Output
【数据规模和约定】
对于100%的数据,有1<=d<=k<=n<=10000, k为偶数,k<=100。
HINT
Source
【分析】
很经典的题目,很不错。
我们将相邻的棋子看成一对,显然,在最后的情况下,每对棋子都是紧贴在一起的。
对于每对棋子,白棋在左边,黑棋在右边,那么白棋就只能往右边走,黑棋也只能往左边走,否则若白棋往左边,黑棋也可以往左边,情况不会有改变。
那么若将每对棋子之间的距离看成一堆石子的数量,就变成经典的nim游戏。
然后用nimk的理论做就行了。
DP有点难想...看代码就看得懂了
/*
唐代白居易
《问刘十九》
绿蚁新醅酒,红泥小火炉。
晚来天欲雪,能饮一杯无。*/ #include <set>
#include <map>
#include <cmath>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define LOCAL
const int MAXL = ;
const long long MOD = ;
const int MAXK = + ;
const int MAXN = + ;
using namespace std;
typedef long long ll;
ll f[][MAXN * ];
ll c[MAXK][], n, K, d; ll C(ll a, ll b){
if (a == b) return 1ll;
//if (b > a - b) b = a - b;
return c[a][b] % MOD;
}
void prepare(){//预处理组合数
memset(c, , sizeof(c));
c[][] = ;
for (ll i = ; i <= 10005ll; i++){
c[i][] = 1ll;
//if (i <= 210) c[i][i] = 1;
for (ll j = ; j < min(i, 250ll); j++)
c[i][j] = (C(i - , j) + C(i - , j - )) % MOD;
}
//for (ll i = 1; i <= 50; i++)
//for (ll j = 0; j <= i; j++) printf("%d %d:%d\n", i, j, C[i][j]);
//printf("%d\n", C[10][2]);
}
void dp(){
K /= ;
memset(f, , sizeof(f));
f[][] = ;//第0位
for (ll i = ; i <= ; i++){
for (ll j = ; j <= n - * K; j++)//注意这一层不需要枚举到n了,因为只有这么多的空位
for (ll k = ; (k * (d + ) <= K) && (k * (d + ) * (1ll<<(i - )) <= j); k++){
f[i][j] = (f[i][j] + (f[i - ][j - k * (d + ) * (1ll<<(i - ))] * C(K, k * (d + ))) % MOD) % MOD; }
}
ll Ans = ;
for (ll i = ; i <= n - * K; i++) Ans = (Ans + (f[][i] * C(n - i - K * + K, K)) % MOD) % MOD;
printf("%lld\n", (C(n, * K) - Ans + MOD) % MOD);
} int main(){ prepare();
scanf("%lld%lld%lld", &n, &K, &d);
dp();
//n的距离,k个石头,1~d次移动
return ;
}
【BZOJ2281】【博弈论+DP】 [Sdoi2011]黑白棋的更多相关文章
- 【BZOJ2281】[SDOI2011]黑白棋(博弈论,动态规划)
[BZOJ2281][SDOI2011]黑白棋(博弈论,动态规划) 题面 BZOJ 洛谷 题解 先看懂这题目在干什么. 首先BZOJ上面的题面没有图,换到洛谷看题就有图了. 不难发现都相邻的两个异色棋 ...
- [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
2281: [Sdoi2011]黑白棋 Time Limit: 3 Sec Memory Limit: 512 MBSubmit: 626 Solved: 390[Submit][Status][ ...
- Bzoj 2281 [Sdoi2011]黑白棋 题解
2281: [Sdoi2011]黑白棋 Time Limit: 3 Sec Memory Limit: 512 MBSubmit: 592 Solved: 362[Submit][Status][ ...
- P2490 [SDOI2011]黑白棋
P2490 [SDOI2011]黑白棋 题意 一个 \(1*n\) 的棋盘上,A 可以移动白色棋子,B 可以移动黑色的棋子,其中白色不能往左,黑色不能往右.他们每次操作可以移动 1 到 \(d\) 个 ...
- BZOJ 2281: [Sdoi2011]黑白棋 (Nim游戏+dp计数)
题意 这题目有一点问题,应该是在n个格子里有k个棋子,k是偶数.从左到右一白一黑间隔出现.有两个人不妨叫做小白和小黑.两个人轮流操作,每个人可以选 1~d 枚自己颜色的棋子,如果是白色则只能向右移动, ...
- [SDOI2011]黑白棋
Description 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小 ...
- bzoj 2281 [Sdoi2011]黑白棋(博弈+组合计数)
黑白棋(game) [问题描述] 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色 ...
- BZOJ2281:[SDOI2011]黑白棋(博弈论,组合数学,DP)
Description 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小 ...
- BZOJ2281[Sdoi2011]黑白棋&BZOJ4550小奇的博弈——DP+nimk游戏
题目描述 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小A可以移动白色 ...
随机推荐
- android新建项目时 出现appcompat_v7工程错误和红色感叹号
最近初学android,版本是22.6.0的话,每次创建一个项目就会出现一个appcompat_v7工程:然后我升级到最新的版本23.0.4之后,创建第一个项目,也会出现一个appcompat_v7工 ...
- Camus导入中文乱码问题(源码修改、编译、部署、任务启动)
Camus使用过程中业务方反映从Kafka导入至HDFS中的数据有中文乱码问题,且业务方确认写入的数据编码为UTF-8,开始跟进. 问题重现: (1)编写代码将带有中文的字符串以编码UTF-8 ...
- 高德地图搜索提示获取信息回传activity刷新ui(二)
应用场景: 在主activity中点击进入到另一个activity搜索提示,获取经纬度,点确定返回到主activity,虽然说需求很奇葩,但是遇到了没办法.. 主要包含两部分,搜索提示+activit ...
- Delphi实现WebService带身份认证的数据传输
WebService使得不同开发工具开发出来的程序可以在网络连通的环境下相互通信,它最大的特点就是标准化(基于XML的一系列标准)带来的跨平台.跨开发工具的通用性,基于HTTP带来的畅通无阻的能力(跨 ...
- Bzoj 2748: [HAOI2012]音量调节 动态规划
2748: [HAOI2012]音量调节 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1234 Solved: 777[Submit][Status ...
- 【转】VS2013编译libjpeg库
原文地址:http://blog.csdn.net/weixinhum/article/details/42718959 现在,很多图像处理工具和开源库都给出了图像解码的函数接口,然而有时这些接口并不 ...
- Calendar - SGU 115(日期判断)
这年的开始的第一天是星期 1 代码如下: =============================================================================== ...
- 杭电 1795 The least one
The least one Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- (四) PHPCMSV9如何更换模板风格
更换模板风格有两种方式: 1.复制default模板 2.到相关模板网站下载模板,推荐网站:http://www.moke8.com/phpcms/ 一.复制default模板 将phpcms默认的 ...
- 【设计模式 - 14】之命令模式(Command)
1 模式简介 命令模式的定义: 命令模式将命令封装成对象,从而使调用一个命令变为调用一个对象的指定方法. 命令模式的优点: 1) 降低了系统耦合度: 2) 新的命 ...