状压最长公共子序列的DP数组,一维最多K(15)个数,且相邻两个数的差不超过1,2^15种状态,预处理转移

#include<cstdio>
#include<algorithm>
using namespace std;
const int mod=1e9+7;
int n,K,now[25],G[25],To[50005][3],F[2][50005][3],ED[50005],ANS[25],S[25];
char s[1000005];
void dfs(int t,int s){
if (t>K){
for (int i=1; i<=K; i++) {
now[i]=now[i-1];
if (s&(1<<i-1)) now[i]++;
}
ED[s]=now[K];
for (int to=0; to<3; to++){
for (int i=1; i<=K; i++) G[i]=max(max(G[i-1],now[i]),now[i-1]+(to==S[i]));
for (int i=K; i>=1; i--) (To[s][to]<<=1)|=(G[i]-G[i-1]);
}
return;
}
dfs(t+1,s<<1);
dfs(t+1,s<<1|1);
}
int main(){
scanf("%d%d",&n,&K);
scanf("%s",s+1);
for (int i=1; i<=K; i++){
if (s[i]=='N') S[i]=0;
else if (s[i]=='O') S[i]=1;
else S[i]=2;
}
dfs(1,0);
F[0][0][0]=1;
for (int i=0; i<n; i++){
for (int pre=0; pre<(1<<K); pre++)
for (int cas=0; cas<3; cas++)
F[(i+1)%2][pre][cas]=0;
for (int pre=0; pre<(1<<K); pre++)
for (int cas=0; cas<3; cas++)
if (F[i%2][pre][cas]){
for (int to=0; to<3; to++){
int now=To[pre][to],Tocas=cas;
if (to==cas) Tocas++;
else{
if (to==0) Tocas=1;
else Tocas=0;
}
if (Tocas==3) continue;
(F[(i+1)%2][now][Tocas]+=F[i%2][pre][cas])%=mod;
}
}
}
for (int now=0; now<(1<<K); now++)
for (int cas=0; cas<3; cas++)
(ANS[ED[now]]+=F[n%2][now][cas])%=mod;
for (int i=0; i<=K; i++)
printf("%d\n",ANS[i]);
return 0;
}

  

BZOJ 5336: [TJOI2018]party的更多相关文章

  1. bzoj 5337 [TJOI2018] str

    bzoj 5337 [TJOI2018] str Link Solution 水题 直接 \(f[i][j]\) 表示以第 \(i\) 位为结束位置,当前已经匹配了前 \(j\) 个氨基酸的方案数 使 ...

  2. bzoj 5338: [TJOI2018]xor (树链剖分+可持久化01Trie)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5338 题面: 5338: [TJOI2018]xor Time Limit: 30 Sec  ...

  3. BZOJ.5338.[TJOI2018]xor(可持久化Trie)

    BZOJ LOJ 洛谷 惊了,18年了还有省选出模板题吗= = 做这题就是练模板的,我就知道我忘的差不多了 询问一就用以DFS序为前缀得到的可持久化Trie做,询问二很经典的树上差分. 注意求询问二的 ...

  4. BZOJ.5339.[TJOI2018]教科书般的亵渎(拉格朗日插值) & 拉格朗日插值学习笔记

    BZOJ 洛谷 题意的一点说明: \(k\)次方这个\(k\)是固定的,也就是最初需要多少张亵渎,每次不会改变: 因某个怪物死亡引发的亵渎不会计分. 不难发现当前所需的张数是空格数+1,即\(m+1\ ...

  5. 5336: [TJOI2018]party

    题解: 比较水啦..dp套dp f[i][j][k]表示枚举了前i位,最大公共子序列匹配状态为j,noi匹配到了第k位 因为g[j]和g[j+1]最多差1 所以可以状压成j 然后内层再dp一下搞出下一 ...

  6. 洛谷 P4592: bzoj 5338: [TJOI2018]异或

    题目传送门:洛谷P4592. 题意简述: 题面说的很清楚了. 题解: 发现没有修改很快乐.再看异或最大值操作,很容易想到可持久化 01trie. 这里要把 01trie 搬到树上,有点难受. 树剖太捞 ...

  7. BZOJ 5334: [Tjoi2018]数学计算

    线段树裸题 难度在于认识到这个没法线性做 #include<cstdio> using namespace std; int n,mod,tr[400005]; void insert(i ...

  8. BZOJ 5338: [TJOI2018]xor 可持久化trie+dfs序

    强行把序列问题放树上,好无聊啊~ code: #include <bits/stdc++.h> #define N 200005 #define setIO(s) freopen(s&qu ...

  9. [模板] dp套dp && bzoj5336: [TJOI2018]party

    Description Problem 5336. -- [TJOI2018]party Solution 神奇的dp套dp... 考虑lcs的转移方程: \[ lcs[i][j]=\begin{ca ...

随机推荐

  1. Java中常见的坑

    概述 Java是门极简风格的语言,比其它语言相比,它故意保持较少的特性,不仅在有些不常见的情况下会出些奇奇怪怪的错误,即使很一般的情况下也有可能让人栽根头.如果你习惯了别的语言,你读Java 的代码很 ...

  2. AngularJS(七):表单-单选框、下拉列表

    本文也同步发表在我的公众号“我的天空” 单选框 在AngulerJS中单选框的处理与复选框有不少相似之处,我们来看以下示例: <body ng-app="myApp" ng- ...

  3. JavaWeb_05_xml相关&dtd快速入门

    学东西怎么学,是什么,能做什么,怎么去做!! 1.xml的简介 1.eXtensible Markup Language:可扩展标记型语言 标记型语言:html是标记型语言 也是使用标签来操作 可扩展 ...

  4. github的pull Request使用

    场景: teamA要一起做一个项目,选择用github管理自己的代码仓库,这时userA在github上新建了一个远程仓库,其他人需要通过pull request来实现提交.那么,问题来了,pull ...

  5. POJ 3252 Round Numbers (区间DP,基础)

    题意: 统计区间[L,R]有多少个数,其二进制表示法中的0的个数不少于1的个数?(不允许前缀0) 思路: 状态表示为 [当前第几位][总位数][1的个数],最后判断一下1的个数是否满足条件,要注意前导 ...

  6. COGS 1715. [CQOI2011]动态逆序对

    ★★★   输入文件:inverse.in   输出文件:inverse.out   简单对比时间限制:2 s   内存限制:128 MB [题目描述] 对于序列A,它的逆序对数定义为满足i<j ...

  7. 【Python图像特征的音乐序列生成】关于数据库到底在哪里下载

    毕竟原网站一个是14年前的一个是16年前的…… 1,http://ifdo.ca/~seymour/nottingham/nottingham.html 这个网站可以下载zip包. 2,https:/ ...

  8. 【Python图像特征的音乐序列生成】关于mingus一个bug的修复,兼改进情感模型

    mingus在输出midi文件的时候,使用这样的函数: from mingus.containers import NoteContainer from mingus.midi import midi ...

  9. Windows Experience Index

    The Windows Experience is still there--even in build 9860.  However, the GUI was retired with Window ...

  10. pod install Pull is not possible because you have unmerged files.

    http://stackoverflow.com/questions/21474536/podfile-gives-an-error-on-install A bug was found in lib ...