2958: 序列染色

题目:传送门


题解:

   大难题啊(还是我太菜了)

   %一发大佬QTT

  


代码:

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define mod 1000000007
using namespace std;
typedef long long LL;
int n,k;
int sb[],sw[];
LL f[][][];//前i位状态为j第i为为k的方案数 (k=0 为B k=1 为w)
//j==0 没有k个B和k个W
//j==1 只有k个B
//j==2 有k个B和k个W
char st[];
int main()
{
scanf("%d%d",&n,&k);scanf("%s",st+);
memset(sb,,sizeof(sb));memset(sw,,sizeof(sw));
for(int i=;i<=n;i++)
{
sb[i]=sb[i-];sw[i]=sw[i-];
if(st[i]=='B')sb[i]++;
else if(st[i]=='W')sw[i]++;
}
memset(f,,sizeof(f));
f[][][]=;//B在左边所以先放个W...
for(int i=;i<=n;i++)
{
if(st[i]!='W')for(int j=;j<=;j++)f[i][j][]=(f[i-][j][]+f[i-][j][]+mod)%mod;
if(st[i]!='B')for(int j=;j<=;j++)f[i][j][]=(f[i-][j][]+f[i-][j][]+mod)%mod;
if(i<k)continue;
if(st[i]!='W' && sw[i]==sw[i-k])
{
f[i][][]=(f[i][][]+f[i-k][][]+mod)%mod;
f[i][][]=(f[i][][]-f[i-k][][]+mod)%mod;
}
if(st[i]!='B' && sb[i]==sb[i-k])
{
f[i][][]=(f[i][][]+f[i-k][][]+mod)%mod;
f[i][][]=(f[i][][]-f[i-k][][]+mod)%mod;
}
}
printf("%lld\n",(f[n][][]+f[n][][]+mod)%mod);
return ;
}

bzoj2958: 序列染色(DP)的更多相关文章

  1. BZOJ:2958 序列染色 DP

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

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

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

  3. BZOJ2958 序列染色

    果然清华集训的题目...显然的DP题但是不会做... 我们令f[i][j][w]表示状态方程 w表示到了字符串的第w个 i = 0, 1, 2分别表示k个B和k个W都没填上.k个B填上了k个W没填上. ...

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

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

  5. codevs 1962 马棚问题--序列型DP

    1962 马棚问题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 每天,小明和他的马外出,然后他们一边跑一边玩耍.当他们结束 ...

  6. Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)

    #include<bits/stdc++.h>using namespace std;const long long mod=998244353;long long f[200007][2 ...

  7. 括号序列的dp问题模型

    括号序列的dp问题模型 Codeforces314E ◦给定一个长度为n的仅包含左括号和问号的字符串,将问号变成左括号或 右括号使得该括号序列合法,求方案总数. ◦例如(())与()()都是合法的括号 ...

  8. [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)

    [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...

  9. 5.13 省选模拟赛 优雅的绽放吧,墨染樱花 多项式 prufer序列 计数 dp

    LINK:优雅的绽放吧,墨染樱花 当时考完只会50分的做法 最近做了某道题受到启发 故会做这道题目了.(末尾附30分 50分 100分code 看到度数容易想到prufer序列 考虑dp统计方案数. ...

随机推荐

  1. 安卓系统使用摄像头API

    原文链接:定制自己的安卓Camera        参考链接:http://blog.csdn.net/tankai19880619/article/details/9075839           ...

  2. Objective-C类成员变量深度剖析--oc对象内存模型

    目录 Non Fragile ivars 为什么Non Fragile ivars很关键 如何寻址类成员变量 真正的“如何寻址类成员变量” Non Fragile ivars布局调整 为什么Objec ...

  3. swift 类型系统 Self self Type

    namedClass:静态类型:与类型实现直接关联:可以用于初始化.类型检查等. namedClass.self:@thick,脱敏(脱关)类型:动态类型:可以作为元类型的实例:可以作为类型参量进行传 ...

  4. 从输入url到页面展示出来经历了哪些过程

    本文只是一个整理向的随笔,以个人思路来简化的同时进行适当的拓展,如有错误,欢迎指正. 1.输入网址.  此时得到一个url 2.域名解析 整个过程都是dns系统在发挥作用,它的目的是将域名和ip对应起 ...

  5. eas之根据bostype查找实体

    select * from  T_PF_BOSOBJECT;所有实体都有一个唯一的类型ID:BOSTYPEID,8位字符串,可切换到“源代码“页签,查找bostype标签里的值.这个ID的用途主要有: ...

  6. 在 CentOS 7 上设置 grub2

    在 CentOS 7 上设置 grub2 1. 开机选单是自动创建出来的 请勿尝试手动编辑开机选单,因为它是按照 /boot/ 目录内的文件自动创建出来的.然而你可以调整 /etc/default/g ...

  7. [系统资源攻略]memory

    内存 这里的讲到的 "内存" 包括物理内存和虚拟内存,虚拟内存(Virtual Memory)把计算机的内存空间扩展到硬盘,物理内存(RAM)和硬盘的一部分空间(SWAP)组合在一 ...

  8. [kernel学习]----好文章梳理

    内存相关 Linux的内存回收和交换 Linux内核分析:页回收导致的cpu load瞬间飙高的问题分析与思考 认识Linux物理内存回收机制 认真分析mmap:是什么 为什么 怎么用 kernel排 ...

  9. c++ STL - priority_queue优先队列详解

    简述 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有最高级先出 (first in, l ...

  10. 使用Linux自带的命令logrotate对Nginx日志进行切割

    说明: Nginx安装目录:/usr/local/nginx/Nginx日志目录:/var/log/nginx/error/*.log /var/log/nginx/access/w1/*.log / ...