bzoj千题计划241:bzoj3864: Hero meet devil
http://www.lydsy.com/JudgeOnline/problem.php?id=3864
题意:
给你一个DNA序列,求有多少个长度为m的DNA序列和给定序列的LCS为0,1,2....
求LCS方式:f[i][j]=max(f[i-1][j],f[i][j-1],f[i-1][j-1]*(s[i]==t[j]))
固定了i,相邻的j的f[i][j]值最多相差1
dp[i][j] 表示长度为i的DNA序列,将“f[ |S| ][j+1]是否比f[ |S| ][j] 大1” 这个状态压缩为j的方案数
若我们知道 状态j加上一个字母k可以到状态nxt[j][k]
那么dp[i+1][nxt[j][k]]+=dp[i][j]
关键是如何求得nxt[j][k]
再一次DP
枚举所有的状态i
令f[j] 表示加上字母k之前的LCS长度,g[j]表示加上字母k之后的LCS长度
g[j]=max(g[j-1],f[j])
如果加上的字母k和原序列第j个字母匹配 g[i]=max(g[j],f[j-1]+1)
g求完后,项邻的两个g要么相等,要么相差1
再把这个状态压缩起来即可
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; const int mod=1e9+; int m; char ss[];
int L,S;
int s[]; int ch[]; int f[],g[];
int nxt[<<][]; int dp[][<<];
int ans[]; void pre()
{
int len; int c[];
for(int i=;i<S;++i)
{
memset(f,,sizeof(f));
for(int j=;j<=L;++j) f[j]=f[j-]+(i>>j-&);
for(int k=;k<;++k)
{
for(int j=;j<=L;++j)
{
g[j]=max(g[j-],f[j]);
if(s[j]==k) g[j]=max(g[j],f[j-]+);
}
nxt[i][k]=;
for(int j=;j<L;++j)
if(g[j+]-g[j]) nxt[i][k]+=<<j;
}
}
} int count(int x)
{
int sum=;
while(x)
{
sum+=x&;
x>>=;
}
return sum;
} void DP()
{
memset(dp,,sizeof(dp));
int now=,last=;
dp[][]=;
for(int i=;i<=m;++i)
{
memset(dp[now],,sizeof(dp[now]));
for(int j=;j<S;++j)
for(int k=;k<;++k)
{
dp[now][nxt[j][k]]+=dp[last][j];
dp[now][nxt[j][k]]-=dp[now][nxt[j][k]]>=mod ? mod : ;
}
swap(now,last);
}
memset(ans,,sizeof(ans));
int t;
for(int i=;i<S;++i)
{
t=count(i);
ans[t]+=dp[last][i];
ans[t]-=ans[t]>=mod ? mod : ;
}
for(int i=;i<=L;++i) printf("%d\n",ans[i]);
} int main()
{
ch['A'-'A']=;
ch['C'-'A']=;
ch['G'-'A']=;
ch['T'-'A']=;
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s",ss+);
scanf("%d",&m);
L=strlen(ss+);
S=<<L;
for(int i=;i<=L;++i) s[i]=ch[ss[i]-'A'];
pre();
DP();
}
return ;
}
bzoj千题计划241:bzoj3864: Hero meet devil的更多相关文章
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
- bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹
http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...
- bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...
- bzoj千题计划250:bzoj3670: [Noi2014]动物园
http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...
随机推荐
- 【绝对给力】Android开发免豆资料(教程+工具+源码)地址汇总
教程下载: [免费]android界面效果全汇总.pdf http://down.51cto.com/data/209179 Android终极开发教程[pdf高清版] http://down.51c ...
- Docker 部署学习
https://yeasy.gitbooks.io/docker_practice/basic_concept/repository.html https://hujb2000.gitbooks.io ...
- Html_兼容性
那么如何禁止使用IE8兼容模式解析网页呢?在IE8以上版本的浏览器增加了一个X-UA-Compatible 头标记,用于为IE8指定不同的页面渲染模式. <meta http-equiv=&qu ...
- 英特尔和 Valve* 将英特尔® Embree 光线追踪技术添加至全新 Steam* Audio 插件
本文从英特尔® Embree 光线追踪技术着手,深入探讨英特尔与 Valve 合作带来的优势:一方面,开发人员使用英特尔高度优化的库创建场景,可以显著加快编译速度:另一方面,逼真的声效可以增强游戏性, ...
- 链家鸟哥:从留级打架问题学生到PHP大神,他的人生驱动力竟然是?
链家鸟哥:从留级打架问题学生到PHP大神,他的人生驱动力竟然是?| 二叉树短视频 http://mp.weixin.qq.com/s/D4l_zOpKDakptCM__4hLrQ 从问题劝退学生到高考 ...
- Beta版本冲刺(四)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组 ...
- T检验在项目上的具体实施
我觉得 T 检验,应该用在 判断某种仿真条件因素 对碳纳米管的随机性 是否有显著影响 上.所以不是针对<相同仿真条件对不同源的影响>这个表中的数据做 T 检验 如:判断 金属/半导体比率 ...
- 11th 5个新的问题——关于软件工程
5个新的问题: 1.现在课上,我们每一个团队开发一个软件,遵循的是敏捷流程,近乎每天都召开Scrum会议,但这一切都基于团队人数很少,这样我们可以畅所欲言,而且不会花费过长时间,但是,如果是大团队呢? ...
- git 生成秘钥
Permission denied (publickey). fatal: The remote end hung up unexpectedly 应该是ssh key过期了吧 试着重新创建ssh k ...
- CentOS 安装 Harbor的简单过程(仅使用http 未使用https)
1. 下载离线安装包 在线安装 99% 会失败, 建议还是使用离线安装包 下载地址 https://github.com/vmware/harbor/releases 20180719 时最新版本的g ...