【BZOJ4606】[Apio2008]DNA DP
【BZOJ4606】[Apio2008]DNA
Description
Input
Output
Sample Input
ACANNCNNG
Sample Output
题意:我们定义一个串的范式=最少能将该串分成多少个连续的段,满足每段都是单调不降的(A<C<G<T)。现用A,C,G,T替换原串中的N,求在所有可能得到的串中,第R小的,范式<=K的串。
题解:感觉思路和数位DP好像。
先倒着DP,令f[i][j][k]表示后i位,范式=k,且第i位是j的串的个数。转移比较简单。最后我们再正着统计一遍。如果第i位=j时方案数<ans,就令ans-=方案数,并枚举j+1。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=50010;
typedef long long ll;
ll R;
int n,m;
int v[maxn];
ll f[maxn][4][10];
char str[maxn];
int main()
{
scanf("%d%d%lld%s",&n,&m,&R,str),m--;
int i,j,k,l;
for(i=1;i<=n;i++)
{
switch(str[i-1])
{
case 'A': v[i]=0; break;
case 'C': v[i]=1; break;
case 'G': v[i]=2; break;
case 'T': v[i]=3; break;
case 'N': v[i]=-1; break;
}
}
f[n+1][3][0]=1;
for(i=n;i>=1;i--)
{
for(j=0;j<4;j++) if(v[i]==-1||v[i]==j) for(k=0;k<=m;k++)
{
for(l=j;l<4;l++) f[i][j][k]+=f[i+1][l][k];
if(k) for(l=0;l<j;l++) f[i][j][k]+=f[i+1][l][k-1];
}
}
for(i=1;i<=n;i++)
{
for(j=0;j<4;j++) for(k=1;k<=m;k++) f[i][j][k]+=f[i][j][k-1];
for(j=0;j<4;j++)
{
ll tmp;
if(j<v[i-1]) tmp=f[i][j][m-1];
else tmp=f[i][j][m];
if(R>tmp) R-=tmp;
else break;
}
v[i]=j;
if(v[i]<v[i-1]) m--;
switch(v[i])
{
case 0: str[i-1]='A'; break;
case 1: str[i-1]='C'; break;
case 2: str[i-1]='G'; break;
case 3: str[i-1]='T'; break;
case -1: str[i-1]='N'; break;
}
}
printf("%s",str);
return 0;
}
【BZOJ4606】[Apio2008]DNA DP的更多相关文章
- 【LeetCode】Repeated DNA Sequences 解题报告
[题目] All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: &quo ...
- 【题解】POJ1934 Trip (DP+记录方案)
[题解]POJ1934 Trip (DP+记录方案) 题意: 传送门 刚开始我是这么设状态的(谁叫我DP没学好) \(dp(i,j)\)表示钦定选择\(i\)和\(j\)的LCS,然而你会发现这样钦定 ...
- 【题解】剪纸条(dp)
[题解]剪纸条(dp) HRBUST - 1828 网上搜不到题解?那我就来写一篇吧哈哈哈 最优化问题先考虑\(dp\),设\(dp(i)\)表示将前\(i\)个字符(包括\(i\))分割成不相交的回 ...
- 【题解】地精部落(DP)
[题解]地精部落(DP) 设\(f_i\)表示强制第一个是谷的合法方案数 转移枚举一个排列的最大值在哪里,就把序列分成了互不相干的两个部分,把其中\(i-1\choose j-1\)的数字分配给前面部 ...
- 【5】肿瘤DNA甲基化数据分析原理及流程
目录 导论 DNA甲基化基本概论 检测DNA甲基化的方法 DNA甲基化数据分析流程及方法 DNA甲基化在肿瘤研究中的应用 导论 表观遗传:非DNA决定的基因表达,或表型改变中可遗传因素的研究 DNA水 ...
- 【BZOJ-1068】压缩 区间DP
1068: [SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1001 Solved: 615[Submit][Status][ ...
- 【BZOJ-1492】货币兑换Cash DP + 斜率优化 + CDQ分治
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 3396 Solved: 1434[Submit][Sta ...
- 【递归】油桶问题dp
问题 : [递归]油桶问题 题目描述 楚继光扬扬得意道:“当日华山论剑,先是他用黯然销魂掌破了我的七十二路空明拳,然后我改打降龙十八掌,却不防他伸开食指和中指,竟是六脉神剑,又胜我一筹.可见天下武学彼 ...
- 【HDU3247】 Resource Archiver(DP+AC自动机+最短路)
Resource Archiver Time Limit: 10000MS Memory Limit: 100000KB 64bit IO Format: %I64d & %I64u ...
随机推荐
- 大数据量下MySQL插入方法的性能比较
不管是日常业务数据处理中,还是数据库的导入导出,都可能遇到需要处理大量数据的插入.插入的方式和数据库引擎都会对插入速度造成影响,这篇文章旨在从理论和实践上对各种方法进行分析和比较,方便以后应用中插入方 ...
- atitit. 研发管理---如何根据自己的特挑选 产业、行业、职业、岗位与自己发展的关系
atitit. 研发管理---如何根据自己的特挑选 产业.行业.职业.岗位与自己发展的关系 1. 产业及分类 1 2. 二.行业 2 3. 职业概念- 3 4. 职业划分 3 5. 职业兴趣分类 4 ...
- Qt打开文件对话框
项目中需要打开文件对话框,就查了一下,不得不说Qt的帮助文档做的真好,非常详细.要实现这个功能有两种方式,使用QFileDialog的静态方法,实例化QFileDialog对象. 基本算是照抄帮助文档 ...
- 《TCP/IP图解》读书笔记
看这本书的目的: 了解计算机之间是怎么通信的 熟悉TCP/IP协议 后面就这两个目的进行展开,要达到这两个目的,读这本书,学到了哪些知识. 一.计算机之间是怎么通信的 先来了解下面几个概念,中继器,二 ...
- mysql 从一个表中查询插入另一个表
insert into dnt_userfields (uid,realname ) select uid,nickname from discuz.dnt_users where uid>72 ...
- CSS学习笔记(7)--html页面的CSS、DIV命名规则
html页面的CSS.DIV命名规则 CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整 ...
- php代码检查
最近写php,几个同事都是没写过c的,经常写的变量没有定义,而php没有编译,错误无法发现. 我们现在用的是NetBeans,好在其提供了语法检测,如下图,让编辑器强制显示我错误
- swift百度地图api
swift使用百度地图api遇到的坑 之前在Android上用过百度地图,以为大概类似,也没仔细看文档,结果被自己坑了 注意事项,http://developer.baidu.com/map/inde ...
- 关于love2d教程的更新
实在抱歉,每周工作六天,一天13小时以上,周日想休息一下,love2d的估计一个月一篇都很难做到了. 三个月后公司的项目应该做完了,那时应该有时间了. love2d估计快发布0.9了,改动应该不是很大 ...
- ZooKeepr日志清理(转)
转载请用注明:@ni掌柜 nileader@gmail.com 在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默 ...