果然清华集训的题目。。。显然的DP题但是不会做。。。

我们令f[i][j][w]表示状态方程

w表示到了字符串的第w个

i = 0, 1, 2分别表示k个B和k个W都没填上、k个B填上了k个W没填上、k个B和k个W都填上了三种状态

j = 0, 1分别表示第w位上填B/W

于是方程就比较容易列出来了,注意要用到容斥原理

 /**************************************************************
Problem: 2958
User: rausen
Language: C++
Result: Accepted
Time:652 ms
Memory:33032 kb
****************************************************************/ #include <cstdio> using namespace std;
const int N = ;
const int mod = 1e9 + ; int n, k;
char st[N];
int s0[N], s1[N], f[][][N]; void read_in() {
int i;
char ch = getchar();
while (ch != 'W' && ch != 'B' && ch != 'X')
ch = getchar();
for (i = ; i <= n; ++i)
st[i] = ch, ch = getchar();
} inline int calc(char c, int *s, int i, int t) {
if (i < k || st[i - k] == c || s[i] - s[i - k]) return ;
return f[t - ][i == k ? : - t][i - k];
} int main() {
int i;
scanf("%d%d", &n, &k);
read_in();
f[][][] = ;
for (i = ; i <= n; ++i) {
s0[i] = s0[i - ] + (st[i] == 'W');
s1[i] = s1[i - ] + (st[i] == 'B');
if (st[i] != 'W') {
f[][][i] = (0ll + f[][][i - ] + f[][][i - ] - calc('B', s0, i, ) + mod) % mod;
f[][][i] = (0ll + f[][][i - ] + f[][][i - ] + calc('B', s0, i, )) % mod;
f[][][i] = (0ll + f[][][i - ] + f[][][i - ]) % mod;
}
if (st[i] != 'B') {
f[][][i] = (0ll + f[][][i - ] + f[][][i - ]) % mod;
f[][][i] = (0ll + f[][][i - ] + f[][][i - ] - calc('W', s1, i, ) + mod) % mod;
f[][][i] = (0ll + f[][][i - ] + f[][][i - ] + calc('W', s1, i, )) % mod;
}
}
printf("%d\n", (f[][][n] + f[][][n]) % mod);
return ;
}

(p.s. Orz 江哥...)

BZOJ2958 序列染色的更多相关文章

  1. bzoj2958: 序列染色(DP)

    2958: 序列染色 题目:传送门 题解: 大难题啊(还是我太菜了) %一发大佬QTT 代码: #include<cstdio> #include<cstring> #incl ...

  2. BZOJ2958 序列染色(动态规划)

    令f[i][0/1/2][0/1]表示前i位,不存在满足要求的B串和W串/存在满足要求的B串不存在W串/存在满足要求的B串和W串,第i位填的是B/W的方案数.转移时考虑连续的一段填什么.大讨论一波后瞎 ...

  3. bzoj2958: 序列染色&&3269: 序列染色

    DP这种东西,考场上就只能看命了.. #include<cstdio> #include<iostream> #include<cstring> #include& ...

  4. BZOJ:2958 序列染色 DP

    bzoj2958 序列染色 题目传送门 Description 给出一个长度为N由B.W.X三种字符组成的字符串S,你需要把每一个X染成B或W中的一个. 对于给出的K,问有多少种染色方式使得存在整数a ...

  5. BZOJ 1006 [HNOI2008] 神奇的国度(简单弦图的染色)

    题目大意 K 国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即 AB 相互认识,BC 相互认识,CA 相互认识,是简洁高效的.为了巩固三角关系,K 国禁止四边关系,五边关系等 ...

  6. [BZOJ5306][HAOI2018]染色

    bzoj luogu Description 给一个长度为\(n\)的序列染色,每个位置上可以染\(m\)种颜色.如果染色后出现了\(S\)次的颜色有\(k\)种,那么这次染色就可以获得\(w_k\) ...

  7. Solution -「HAOI 2018」「洛谷 P4491」染色

    \(\mathcal{Description}\)   Link.   用 \(m\) 种颜色为长为 \(n\) 的序列染色,每个位置一种颜色.对于一种染色方案,其价值为 \(w(\text{出现恰 ...

  8. 2016 Multi-university training contest

    day 1 A 给G,w(e)1M(diff),|V|100K,|E|1M,求 MST MST上任意两点间距离的期望 显然MST唯一 E(dis(u,v))可以通过计算每条边的贡献加出来 B n个并行 ...

  9. bzoj1006 [HNOI2008]神奇的国度

    1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 2304  Solved: 1043 Description ...

随机推荐

  1. 数据展现-百度js绘图

    echarts:酷炫的绘图效果 http://echarts.baidu.com/examples/#chart-type-calendar

  2. mysql 数据操作 单表查询 where约束 练习

    create table employee( id int not null unique auto_increment, name ) not null, sex enum('male','fema ...

  3. git-【七】bug分支

    在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉. 比如我在开发中接到一个40 ...

  4. Flask系列之源码分析(二)

    应用技术点 python之__setattr__ python之threading.local python之偏函数 flask源码上下文管理 1.综述过程 将请求对象压入栈 1.请求进入 __cal ...

  5. linux rsync安装与使用

    rsync Usage: /etc/init.d/rsync {start|stop|reload|force-reload|restart|status} rsync默认配置文件 # default ...

  6. 如何把PDF文件转换为JPG图片

    大家有遇到需要将PDF文件转换为JPG的情况么,文档资料里面经常会有一些图片类型的内容,有的时候我们需要获取这些图片内容,但是PDF文件又是不可编辑的,那如何把PDF文件转换为JPG图片呢,跟着小编一 ...

  7. uva672

      Gangsters  N gangsters are going to a restaurant. The i-th gangster comes at the time Ti and has t ...

  8. 基于Policy Gradient实现CartPole

    http://chenrudan.github.io/blog/2016/09/04/cartpole.html 首页 分类 关于 归档 标签 基于Policy Gradient实现CartPole ...

  9. supervisor管理ELK进程

    1.配置supervisor #更新epel yum install epel-release yum install python-pip pip install supervisor -p /et ...

  10. angular6开发不完全笔记(一) -- ng-cli

    新建项目 请在终端/控制台窗口中运行 ng -v 命令. 确定您已安装@angular/cli if没有执行 npm install -g @angular/cli 全局安装 Angular CLI. ...