BZOJ5336 DP套DP
https://www.lydsy.com/JudgeOnline/problem.php?id=5336
萌新第一次写dp套dp.
先不考虑有NOI的限制.
考虑普通lcs是怎么做的.
f[i][j]=max(f[i-1][j],f[i][j-1],(f[i-1][j-1]+1)*[S[i]==T[j]]).
设f[i]表示对于原串,生出串做到第i的位置时,最长公共子序列长度.
发现相邻的i-1~i只会f值最多+1,于是可以对这个状态进行差分后,状压存储.
预处理出在状态S后添加字符w[i],所得到的新的f[].
设dp[i][S][len]表示dp到第i位,f的差分后状态位S,匹配NOI字符串的长度为len.
添加字符w有
dp[i][trans[S][w]][mp[len][w]]+=dp[i-1][S][len].
#include<cstdio> #include<algorithm> #include<cstring> #define rep(i,s,t) for(register int i=s;i<=t;++i) #define _rep(i,s,t) for(register int i=s;i>=t;--i) #define Rep(i,s,t) for(register int i=s;i<t;++i) #define go(x) for(register int e=las[x];e;e=nxt[e]) #define re register #define fi first #define se second #define mp(x,y) make_pair(x,y) #define pb push_back #define pii pair<int,int> #define gi(x) read(x) #define gii(x,y) read(x),read(y) #define giii(x,y,z) read(x),read(y),read(z) #define ms(f,x) memset(f,x,sizeof f) namespace IO{#define gc getchar()#define pc(x) putchar(x)template<typename T>inline void read(T &x){x=0;int f=1;char ch=gc;while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=gc;}while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=gc;x*=f;return;}template<typename T>inline void write(T x=0){T wr[51];wr[0]=0;if(x<0)pc('-'),x=-x;if(!x)pc(48);while(x)wr[++wr[0]]=x%10,x/=10;while(wr[0])pc(48+wr[wr[0]--]);return;} } using IO::read; using IO::write; typedef long long ll; typedef double db; using namespace std; const int mod=1e9+7; char w[]={'N','O','I'}; char ch[20]; int n,m,S; int f[2][1<<15][3],mp[3][3],ans[1011]; int g[20],h[20],trans[1<<15][3],sz[1<<15]; inline void inc(int &x,int y){x+=y;if(x>=mod)x-=mod; } inline int zip(int *h){re int s=0;rep(i,1,n)s|=((h[i]-h[i-1])<<(i-1));return s; } inline void unzip(int *h,int s){rep(i,1,n)h[i]=h[i-1]+(s&1),s>>=1; } inline void init(){rep(i,1,S)sz[i]=sz[i>>1]+(i&1);rep(k,0,2)rep(s,0,S){unzip(g,s),ms(h,0);rep(i,1,n){h[i]=max(h[i-1],g[i]);if(w[k]==ch[i])h[i]=max(h[i],g[i-1]+1);}trans[s][k]=zip(h);} } int main(){gii(m,n),scanf("%s",ch+1),S=(1<<n)-1,init();mp[0][0]=mp[1][0]=mp[2][0]=f[0][0][0]=1,mp[1][1]=2;rep(i,1,m){int p=i&1,q=p^1;ms(f[p],0);rep(s,0,S)rep(j,0,2)rep(k,0,2){if(k==2&&j==2)continue;re int y=trans[s][k];inc(f[p][y][mp[j][k]],f[q][s][j]); }}rep(s,0,S)rep(j,0,2)inc(ans[sz[s]],f[m&1][s][j]);rep(i,0,n)printf("%d\n",ans[i]);return 0; }
BZOJ5336
转载于:https://www.cnblogs.com/Stump/p/9069293.html
BZOJ5336 DP套DP相关推荐
- bzoj 3864: Hero meet devil [dp套dp]
3864: Hero meet devil 题意: 给你一个只由AGCT组成的字符串S (|S| ≤ 15),对于每个0 ≤ .. ≤ |S|,问 有多少个只由AGCT组成的长度为m(1 ≤ m ≤ ...
- dp套dp(动态规划)
dp套dp 这是一个对于一类动态规划的计数问题的处理方法,问题常常是如果形式确定就可以直接dp,但是现在却要求满足某个要求的所有方案数,一般的处理方法就是一维负责增量构造,其他维度用来表示内部dp状态 ...
- [XSY] 相似(DP套DP)
相似 在看这道题前,有必要先看一下DP套DP的入门题[uoj3864]Hero meet devil,附上两篇写得不错的题解: https://blog.csdn.net/Ike940067893/a ...
- BZOJ 3864: Hero meet devil (从dp性质实现dp套dp)
题意:求长度为m的,字符集大小为4的,字符串,中,与字符串S(|S|<=15)的最长公共子序列长度=i的字符串数量.i∈0→∣S∣i \ \in 0 \to |S|i ∈0→∣S∣ 发现这个状态 ...
- hdu4899 dp套dp
题意:只含字母ATGC, 给定一个S串,长度小于等于15,构造满足LCS(S,T)=X的T串,求这样的T串的个数,0<=X<=|S| 网上有一堆题解,但大多数都讲得根本让人无法理解 以下 ...
- 【luogu P4590】游园会(DP套DP)
游园会 题目链接:luogu P4590 题目大意 给你一个匹配字符串,然后问你对于所有的长度为 n 的字符串,满足不存在 NOI 的子串,跟匹配字符串 LCS 为 x 的有多少个,对于每个 x 都求 ...
- #3864. Hero meet devil dp套dp + 状压 + 状态机
传送门 文章目录 题意: 思路: 题意: 给你一个只包含ACGTACGTACGT的串sss,再给你一个mmm,第iii行输出有多少个长度为mmm且只包含ACGTACGTACGT的串与sss的lcslc ...
- [ZJOI2019]麻将 题解(dp 套 dp)
文章目录 前言 题面 题解 坑点 代码 前言 做这道题的想法从看到这场比赛的 T2 的题解时就开始了.3.1 ~ 3.16 号,共 16 天的历程,我才终于搞出来这道题.在这 16 天里,我每天都要花 ...
- P4590 [TJOI2018]游园会 dp套dp + 状态机
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的串sss,其只包含NOINOINOI三个字母,给你一个mmm,代表ttt串的长度,ttt串包含NOINOINOI三个字母但是不存在三个连 ...
- [BZOJ 3864][HDU 4899]Hero meet devil(DP套DP)
题意 给你一个只由AGCT组成的字符串S(|S|≤15),对于每个1≤i≤|S| 询问有多少个只由AGCT组成的长度为m(1≤m≤1000)的字符串T,使得LCS(S,T)=i. |S|<=15 ...
最新文章
- 整合资源_java的基础关键字
- NAT+VLAN+CHAP实验配置(一)
- 学习笔记Flink(四)—— Flink基础API及核心数据结构
- bzoj4514[Sdoi2016]数字配对
- phantomjs安装所需依赖
- PDF.js开发笔记
- Uber提出有创造力的POET:自行开发更困难环境和解决方案
- talentcentral测评结果_WinTalent人才测评系统
- invocation, 作者 Medwyn Goodall,女巫医 [搜索 invocation Medwyn Goodall]
- 油猴管理程序复制百度文库网页内容
- 【计算机网络】谢希仁教材轻松解读 概述篇
- Spring学习笔记 Spring项目介绍
- WIFI6比WIFI5好在哪里呢?
- Android打印小票速度太慢,解决打印PDF打印机打印速度慢的问题(适用所有打印机)...
- linux web 网站搭建
- 2022年南京Java培训机构排名,实力突出遥遥领先
- 沧海一粟第五次团队博客
- spinal HDL - 02 - Spinal HDL数据类型 - 基本数据类型
- 国科大学习资料--模式识别与机器学习(黄庆明)--期末复习题4(含答案)
- 华硕笔记本重置计算机,手把手教你华硕笔记本电脑如何恢复出厂设置