bzoj2958: 序列染色(DP)
2958: 序列染色
题目:传送门
题解:
大难题啊(还是我太菜了)
代码:
#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)的更多相关文章
- BZOJ:2958 序列染色 DP
bzoj2958 序列染色 题目传送门 Description 给出一个长度为N由B.W.X三种字符组成的字符串S,你需要把每一个X染成B或W中的一个. 对于给出的K,问有多少种染色方式使得存在整数a ...
- BZOJ2958 序列染色(动态规划)
令f[i][0/1/2][0/1]表示前i位,不存在满足要求的B串和W串/存在满足要求的B串不存在W串/存在满足要求的B串和W串,第i位填的是B/W的方案数.转移时考虑连续的一段填什么.大讨论一波后瞎 ...
- BZOJ2958 序列染色
果然清华集训的题目...显然的DP题但是不会做... 我们令f[i][j][w]表示状态方程 w表示到了字符串的第w个 i = 0, 1, 2分别表示k个B和k个W都没填上.k个B填上了k个W没填上. ...
- bzoj2958: 序列染色&&3269: 序列染色
DP这种东西,考场上就只能看命了.. #include<cstdio> #include<iostream> #include<cstring> #include& ...
- codevs 1962 马棚问题--序列型DP
1962 马棚问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 每天,小明和他的马外出,然后他们一边跑一边玩耍.当他们结束 ...
- 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 ...
- 括号序列的dp问题模型
括号序列的dp问题模型 Codeforces314E ◦给定一个长度为n的仅包含左括号和问号的字符串,将问号变成左括号或 右括号使得该括号序列合法,求方案总数. ◦例如(())与()()都是合法的括号 ...
- [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)
[BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...
- 5.13 省选模拟赛 优雅的绽放吧,墨染樱花 多项式 prufer序列 计数 dp
LINK:优雅的绽放吧,墨染樱花 当时考完只会50分的做法 最近做了某道题受到启发 故会做这道题目了.(末尾附30分 50分 100分code 看到度数容易想到prufer序列 考虑dp统计方案数. ...
随机推荐
- 遍历WPF DataGrid单元格
using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Media; ...
- wpf,vb,位图剪裁的方法
‘ 貌似WPF对GDI+不提供支持,要达到剪裁图像的方法,可以使用image.clip,’不过clip只是对图片的一个遮挡拦截效果,并不改变本身的图片资源.‘下面的代码提供了剪裁图片资源的方法. Di ...
- MessageDigest 加密和解密2
package com.drawthink.platform.util; import java.security.MessageDigest; import java.security.NoSuch ...
- JQuery 兼容所有浏览器的复制到剪切板功能
灵机一动想的点子,应该不难理解 <textarea onmousedown='selectAll(this);'>11111</textarea> function selec ...
- Unity引擎GUI之Button
UGUI Button,可以说是真正的使用最广泛.功能最全面.几乎涵盖任何模块无所不用无所不能的组件,掌握了它的灵巧使用,你就几乎掌握了大半个UGUI! 一.Button组件: Interactabl ...
- 修改withdraw 方法
修改withdraw 方法 练习目标-使用有返回值的方法:在本练习里,将修改withdraw方法以返回一个布尔值来指示交易是否成功. 任务 1. 修改Account类 修改deposit 方法返回tr ...
- ICCV2015上的GazeTracker论文总结
SLAM问题先慢慢编译一段时间,赶紧拾起来GazeTrack的事情...... ICCV2015的大部分paper已经可以下载,文章列表在这个位置. http://www.cvpapers.com/i ...
- python tips:匿名函数lambda
lambda用于创建匿名函数,下面两种函数定义方式等价. f = lambda x: x + 2 def f(x): return x + 2 立刻执行的匿名函数 (lambda x: print(x ...
- Linux常见英文报错中文翻译
Linux常见英文报错中文翻译(菜鸟必知) 1.command not found 命令没有找到 2.No such file or directory 没有这个文件或目录 3.Permission ...
- C#使用OracleDataReader返回DataTable
string data = string.Empty; DataTable OutDataTable = new DataTable(); OracleDataReader daReader = cm ...