博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj2958: 序列染色&&3269: 序列染色
阅读量:5172 次
发布时间:2019-06-13

本文共 1081 字,大约阅读时间需要 3 分钟。

DP这种东西,考场上就只能看命了。。

#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int mod=1e9+7;LL f[1100000][3][2];//f[i][j][k]表示第i个位置 j=0没有连续K个的B或W,j=1只有B有,j=2 BW都有 k表示放B还是W int b[1100000],w[1100000];char ss[1100000];int main(){ int n,K; scanf("%d%d",&n,&K); scanf("%s",ss+1); for(int i=1;i<=n;i++) { b[i]=b[i-1];w[i]=w[i-1]; if(ss[i]=='B')b[i]++; else if(ss[i]=='W')w[i]++; } memset(f,0,sizeof(f));f[0][0][1]=1; for(int i=1;i<=n;i++) { if(ss[i]=='B'||ss[i]=='X') { f[i][0][0]=(f[i][0][0]+(f[i-1][0][0]+f[i-1][0][1])%mod)%mod; f[i][1][0]=(f[i][1][0]+(f[i-1][1][0]+f[i-1][1][1])%mod)%mod; f[i][2][0]=(f[i][2][0]+(f[i-1][2][0]+f[i-1][2][1])%mod)%mod; } if(ss[i]=='W'||ss[i]=='X') { f[i][0][1]=(f[i][0][1]+(f[i-1][0][0]+f[i-1][0][1])%mod)%mod; f[i][1][1]=(f[i][1][1]+(f[i-1][1][0]+f[i-1][1][1])%mod)%mod; f[i][2][1]=(f[i][2][1]+(f[i-1][2][0]+f[i-1][2][1])%mod)%mod; } if(i

 

转载于:https://www.cnblogs.com/AKCqhzdy/p/8810508.html

你可能感兴趣的文章
CodeIgniter学习笔记(四)——CI超级对象中的load装载器
查看>>
.NET CLR基本术语
查看>>
ubuntu的home目录下,Desktop等目录消失不见
查看>>
建立,查询二叉树 hdu 5444
查看>>
[Spring框架]Spring 事务管理基础入门总结.
查看>>
2017.3.24上午
查看>>
Python-常用模块及简单的案列
查看>>
LeetCode 159. Longest Substring with At Most Two Distinct Characters
查看>>
基本算法概论
查看>>
jquery动态移除/增加onclick属性详解
查看>>
JavaScript---Promise
查看>>
暖暖的感动
查看>>
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>