3864: Hero meet devil

题意:

给你一个只由AGCT组成的字符串S (|S| ≤ 15),对于每个0 ≤ .. ≤ |S|,问

有多少个只由AGCT组成的长度为m(1 ≤ m ≤ 1000)的字符串T,使得\(LCS(T,S) = i\)?


dp套dp!

通过一个外层的dp来计算使得另一个dp方程(子dp)最终结果为特定值输入数

一位一位确定子dp的输入,记录子dp的状态值


子dp:

\(d(i,j)\)表示\(LCS(T[1,i],S[1,j])\),对第二维差分,\(j\)与\(j-1\)只可能相差0/1,可以状压

外层dp:

\(f(i,s)\)表示确定到T的第i位,子dp状态值为s的方案数

预处理子dp每种状态值加一个字符后的转移,然后进行外层dp即可


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 1005, mo = 1e9+7;
inline int read() {
char c=getchar(); int x=0,f=1;
while(c<'0'||c>'9') {if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}
return x*f;
} int n, m; char str[20], c[10] = "ACGT";
int trans[1<<15][4], one[1<<15], f[2][1<<15];
void init() {
static int d[20], g[20];
for(int s=0; s < 1<<n; s++) {
if(s) one[s] = one[s ^ (s&-s)] + 1;
for(int j=0; j<n; j++) d[j+1] = d[j] + bool(s & (1<<j));
for(int k=0; k<4; k++) {
for(int j=1; j<=n; j++) {
g[j] = max(g[j-1], d[j]);
if(c[k] == str[j]) g[j] = max(g[j], d[j-1]+1);
}
trans[s][k] = 0;
for(int j=0; j<n; j++) if(g[j+1] - g[j]) trans[s][k] |= 1<<j;
}
}
}
int ans[N];
int main() {
freopen("in", "r", stdin);
int T = read();
while(T--) {
scanf("%s", str+1); m = read(); n = strlen(str+1);
init();
memset(ans, 0, sizeof(ans));
memset(f, 0, sizeof(f));
f[0][0] = 1; int p = 0;
for(int i=1; i<=m; i++, p ^= 1) {
memset(f[p^1], 0, sizeof(f[p^1]));
for(int s=0; s < 1<<n; s++)
for(int k=0; k<4; k++) (f[p^1][trans[s][k]] += f[p][s]) %= mo;
}
for(int s=0; s < 1<<n; s++) (ans[one[s]] += f[p][s]) %= mo;
for(int i=0; i<=n; i++) printf("%d\n", ans[i]);
}
}

bzoj 3864: Hero meet devil [dp套dp]的更多相关文章

  1. BZOJ 3864 Hero meet devil (状压DP)

    最近写状压写的有点多,什么LIS,LCSLIS,LCSLIS,LCS全都用状压写了-这道题就是一道状压LCSLCSLCS 题意 给出一个长度为n(n<=15)n(n<=15)n(n< ...

  2. BZOJ 3864 Hero meet devil 超详细超好懂题解

    题目链接 BZOJ 3864 题意简述 设字符集为ATCG,给出一个长为\(n(n \le 15)\)的字符串\(A\),问有多少长度为\(m(m \le 1000)\)的字符串\(B\)与\(A\) ...

  3. bzoj 3864: Hero meet devil(dp套dp)

    题面 给你一个只由\(AGCT\)组成的字符串\(S (|S| ≤ 15)\),对于每个\(0 ≤ .. ≤ |S|\),问 有多少个只由\(AGCT\)组成的长度为\(m(1 ≤ m ≤ 1000) ...

  4. bzoj 3864: Hero meet devil

    bzoj3864次元联通们 第一次写dp of dp (:з」∠) 不能再颓废啦 考虑最长匹配序列匹配书转移 由于dp[i][j]的转移可由上一行dp[i-1][j-1],dp[i-1][j],dp[ ...

  5. BZOJ 3864 Hero Meets Devil

    题目大意 给定一个由AGCT组成的串\(t\), 求对于所有的\(L \in [1, |t|]\), 有多少个由AGCT组成的串\(s\)满足\(LCS(s, t) = L\). Solution 传 ...

  6. HDU 4899 Hero meet devil (状压DP, DP预处理)

    题意:给你一个基因序列s(只有A,T,C,G四个字符,假设长度为n),问长度为m的基因序列s1中与给定的基因序列LCS是0,1......n的有多少个? 思路:最直接的方法是暴力枚举长度为m的串,然后 ...

  7. 【BZOJ3864】Hero meet devil DP套DP

    [BZOJ3864]Hero meet devil Description There is an old country and the king fell in love with a devil ...

  8. DP套DP

    DP套DP,就是将内层DP的结果作为外层DP的状态进行DP的方法. [BZOJ3864]Hero meet devil 对做LCS的DP数组差分后状压,预处理出转移数组,然后直接转移即可. tr[S] ...

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

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

随机推荐

  1. android动画源码合集、动态主题框架、社交app源码等

    Android精选源码 仿MIUI果冻视图-BouncingJellyView   一个快速易用的动态主题框架   android动画效果集合源码   android使用Kotlin开发的Dribbb ...

  2. 一篇文章让你深透理解cookie和session,附带分布式WEB系统redis共享session方案

    cookie和session有什么区别?这是一个很基础的知识点,大家可能都知道一个大概:cookie是存在客户端的,session是存储在服务端,cookie和session用来验证识别用户的登录状态 ...

  3. 织梦5.7DEDECMS标签大全

    1.关键描述调用标签: 2.路径调用标签: {dede:field name='templeturl'/} {dede:global.cfg_templets_skin/} 3.网站标题调用标签: d ...

  4. dede从www跟目录迁移,网站空间

    图集缩略图表名dede_uploads                    字段url; 图集文章内部的图片表名dede_addonimages        字段imgurls 频道文章列表的图片 ...

  5. vue-cli创建的项目中引入第三方库报错 'caller', 'calle', and 'arguments' properties may not be...

    http://blog.csdn.net/sophie_u/article/details/76223978 以在vue中引入mui第三方库为例: 虽然针对vue,有单独的vue-mui库可以使用,但 ...

  6. 邓_thinkphp口试

    描述php框架开发 通过提供一个开发Web程序的基本架构,PHP开发框架把PHPWeb程序开发摆到了流水线上.换句话说,PHP开发框架有助于促进快速软件开发(RAD),这节约了你的时间,有助于创建更为 ...

  7. android 基础04-BroadCastReceiver

    Android 系统中的广播(BroadCast) 是组件与组件进行的一种可跨线程的通信方式.类似于 广播者-订阅者(publish-subscribe) 的实现,当系统或者某个应用的状态发生改变时, ...

  8. Oracle创建、管理撤销表空间

    撤销管理模式: 用户通过设定撤销管理模式(undo mode)就可以灵活地选择使用手动撤销管理(manual undo management)或自动撤销管理(automatic undo manage ...

  9. maven配置文件详解

    settings.xml 本篇文章主要对maven中setting.xml配置文件进行解释 1.声明规范 <settings xmlns="http://maven.apache.or ...

  10. 开地址哈希表(Hash Table)的接口定义与实现分析

    开地址哈希函数的接口定义 基本的操作包括:初始化开地址哈希表.销毁开地址哈希表.插入元素.删除元素.查找元素.获取元素个数. 各种操作的定义如下: ohtbl_init int ohtbl_init ...