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+7;int m;char ss[16];
int L,S;
int s[16];int ch[26];int f[16],g[16];
int nxt[1<<15][4];int dp[2][1<<15];
int ans[16];void pre()
{int len; int c[16];for(int i=0;i<S;++i){memset(f,0,sizeof(f));for(int j=1;j<=L;++j) f[j]=f[j-1]+(i>>j-1&1);for(int k=0;k<4;++k){for(int j=1;j<=L;++j){g[j]=max(g[j-1],f[j]);if(s[j]==k) g[j]=max(g[j],f[j-1]+1);}nxt[i][k]=0;for(int j=0;j<L;++j)if(g[j+1]-g[j]) nxt[i][k]+=1<<j;}}
}int count(int x)
{int sum=0;while(x){sum+=x&1;x>>=1;}return sum;
}void DP()
{memset(dp,0,sizeof(dp));int now=1,last=0;dp[0][0]=1;for(int i=1;i<=m;++i){memset(dp[now],0,sizeof(dp[now]));for(int j=0;j<S;++j)for(int k=0;k<4;++k){dp[now][nxt[j][k]]+=dp[last][j];dp[now][nxt[j][k]]-=dp[now][nxt[j][k]]>=mod ? mod : 0;}swap(now,last);}memset(ans,0,sizeof(ans));int t;for(int i=0;i<S;++i) {t=count(i);ans[t]+=dp[last][i];ans[t]-=ans[t]>=mod ? mod : 0;}for(int i=0;i<=L;++i) printf("%d\n",ans[i]);
}int main()
{ch['A'-'A']=0;ch['C'-'A']=1;ch['G'-'A']=2;ch['T'-'A']=3;int T;scanf("%d",&T);while(T--){scanf("%s",ss+1);scanf("%d",&m);L=strlen(ss+1);S=1<<L;for(int i=1;i<=L;++i) s[i]=ch[ss[i]-'A'];pre();DP();}return 0;
}

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8454799.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络工程本科培养计划,网络工程专业卓越计划本科培养方案2015版-西安电子科技大学计算机.doc...

网络工程专业卓越计划本科培养方案2015版-西安电子科技大学计算机.doc网络工程专业卓越计划本科培养方案一、培养目标及培养模式(一)培养目标网络工程专业培养服务于社会主义现代化建设需要的德、智、体、美全面发展&#xff0c;较好的掌握工科公共基础知识&#xff0c;系统地掌…

Apache日志配置

有时候我们需要定制Apache默认日志的格式和内容&#xff0c;比如增加或减少日志所记录的信息、改变默认日志文件的格式等。本文介绍可以用日志 记录的所有信息&#xff0c;以及如何设置Apache使其记录这些信息。    一、定义日志格式(4月3日) 很久以前&#xff0c;日志文件…

web前端【补充】CSS补充

css常用的一些属性&#xff1a; 1.去掉下划线 &#xff1a;text-decoration:none ;2.加上下划线&#xff1a; text-decoration: underline; 3.调整文本和图片的位置&#xff08;也就是设置元素的垂直对齐方式&#xff09;&#xff1a;vertical-align:-20px; 没设置之前&#xf…

语言教案 小小计算机,小班《小小手机本领大》语言教案

【活动目标】1、认识各种手机&#xff0c;了解手机的变化史。2、探索手机的秘密&#xff0c;知道手机的使用方法。【活动准备】各类手机。【活动过程】一、谈话引出课题。星期天你和妈妈去公园&#xff0c;不小心和妈妈走散了&#xff0c;小朋友们有什么办法能找到妈妈&#xf…

XNA游戏:Hello XNA

下面创建一个简单的Windows Phone 7的XNA 程序&#xff0c;只是一个Hello XNA的文本&#xff0c;从屏幕的左上角一直往右下角移动&#xff0c;通过该例子来开始Windows Phone 7 XNA的游戏编程。 新建一个项目后可以看到这样的一个项目工程结构&#xff0c;如图所示。 Content项…

最快超级计算机神威,我国超算第一不保, 2018年最快超级计算机超神威太湖之光2倍...

原标题&#xff1a;我国超算第一不保, 2018年最快超级计算机超神威太湖之光2倍计算机的进化可以说是日新月异&#xff0c;去年的我国的神威太湖之光与天河二号分别为全球最快的大型计算机榜单第一和第二名。但是2018年新的超级计算机性能排名又出来了&#xff0c;这次我国的神威…

Website for the introduction to Matlab and Java

http://www.aquaphoenix.com/#Lectures转载于:https://www.cnblogs.com/stoneresearch/archive/2011/09/21/4336541.html

20180223

<1>集合对象转数组 Object[] arrayOfObject list.toArray(); <2>数组复制 int[] arr1 {1, 2, 3, 4, 5}; int[] arr2 Arrays.copyOf(arr1, arr1.length); Arrays的copyOf()方法传回的数组是新的数组对象&#xff0c;所以您改变传回数组中的元素值&#xff0c;也…

html5 抽奖程序,真正的网页抽奖-JavaScript HTML5代码

圆盘抽奖*.{margin:0;padding:0;}#elm1{height:40px;background-color:#a00;}#elm2{height:50px;background-color:#0a0;}#wrap{position:relative;height:400px;}#bg{position:absolute;left:0;top:0;}#cell{position:absolute;left:0;top:0;}#control{position:absolute;left…

杂七杂八的小技巧

1、for循环 使用for循环过程中&#xff0c;数组的长度&#xff0c;使用一个变量来接收&#xff0c;这样有利于代码执行效率得到提高&#xff0c;而不是每走一次循环&#xff0c;都得重新计算数组长度 不推荐 for(var i0;i<arr.length,i){} 推荐 for(var i0,lenarr.length;i&…

计算机怎么删除表格,电脑中删除Excel2010表格多余图片的三种方法

为了让表格看起来更加直观&#xff0c;很多朋友都会在Excel中插入图片。那么&#xff0c;当我们大批量插入图片时&#xff0c;如果想要删除的话&#xff0c;应该怎么办呢&#xff1f;以下是系统城小编为您带来的电脑中删除Excel2010表格多余图片的三种方法&#xff0c;希望对您…

C#设计模式--模板方法模式(学习Learning hard 设计模式笔记)

class Program{static void Main(string[] args){//创建一个菠菜实例并调用模板方法Spinach spinach new Spinach();spinach.CookVegetable();Thread.Sleep(5000);//创建一个白菜实例并调用模板方法ChineseCabbage chineseCabbage new ChineseCabbage();chineseCabbage.CookV…

Windows下UltraEdit查看Objective-C代码高亮工具

如果您在 Windows 下习惯用 UltraEdit&#xff0c;会发现它查看 Objective-C 源代码没有高亮效果。CocoaChina 会员 “逍遥一狂” 制作的 UltraEdit 查看 Objective-C 代码高亮工具应该会很有帮助。 下载附件 wordfile.zip (61 K) &#xff0c;解压出 wordfile.uew 文件。 在 U…

sql 2008找不到服务器,sql server 2005 数据库迁移问题总结——错误 ‘80004005’ 在 sys.servers 中找不到服务器 ‘XXX’...

SQL2005做转移的过程中遇到此问题&#xff0c;到时为了方便&#xff0c;转移方法直接采用的&#xff0c;停止A服务器&#xff0c;复制A服务器中的数据库&#xff0c;将此数据库加载到B服务器&#xff0c;重启B服务器&#xff0c;有可能这种迁移方法有问题&#xff0c;最后的结果…

Linux新内核修复14年古老bug

前往巴西参加了LinuxCon大会之后&#xff0c;Linus Torvalds立即投入工作&#xff0c;近日又放出了Linux Kernel系统内核的2.6.36-rc5预览版。该版本依然是修复bug和其他问题为主&#xff0c;其中就包括一个存在了14年之久的古老bug。对于那些运行在ALPHA架构上的用户来说&…

析构函数和动态内存管理

析构函数 当类的对象撤销时&#xff0c;析构函数被隐式调用。析构函数不是释放内存&#xff0c;而是释放内存前进行扫尾工作。 对象何时撤销&#xff1f;1&#xff0c;静态分配的&#xff0c;生存期过后撤销。2&#xff0c;动态分配的&#xff0c;delete时撤销。 析构函数的命名…

tl_war302虚拟服务器,tl-war302设置教程

tl-war302设置教程[2021-02-16 17:51:52] 简介:php去除nbsp的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#xff1a;《…

【简讯】微软拟发布开源VB6

5月20日&#xff0c;来自国外媒体的报道&#xff0c;在本周的Tech-Ed会议上&#xff0c;微软对其MVP表示&#xff0c;正在开源Visual Basic 6.0的代码到CodePlex平台&#xff0c;在6月底前完成。Roy Osherove&#xff0c;ALT.NET社区的资深会员&#xff0c;TDD专家&#xff0c;…

HTML 5 meta 标签

meta标签可以&#xff1a; 一、定义针对搜索引擎的关键词&#xff0c;如&#xff1a; <meta name"keywords" content"HTML, CSS, XML, XHTML, JavaScript" />二。   二、定义对页面的描述 <meta name"description" content"HTML…

怎样修改iis 服务器日期,怎么在IIS里设置服务器端缓存时间?

设置IIS缓存的方法1.测试&#xff0c;可以缓存整个Share工程(经测试IIS中的缓存测试对ASPX页面不起作用&#xff0c;估计与页面压缩的设置原理一样)&#xff1b;2.需要设置缓存的工程&#xff1a; Share&#xff0c;Portal(根据IIS日志分析报告中的“Most Requested Directorie…