【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 ...
随机推荐
- LOSF海量小文件问题解决思路及开源库
"+++++++++++++++ LOSF 海量小文件存储和优化方案 +++++++++++++++++++++++++++++++++++++++++++++"一.问题产生原因以 ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第10章节--SP2013中OAuth概览 应用程序验证
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第10章节--SP2013中OAuth概览 应用程序验证 既然你懂得了什么是应用程序身份.而且知道怎样在SP中创建和设置 ...
- MongoDB Query 的几个方法
Query.All("name", "a", "b");//通过多个元素来匹配数组Query.And(Query.EQ("name ...
- Objective-c的@property 详解
转自:http://www.cnblogs.com/andyque/archive/2011/08/03/2125728.html 之前很多网友对我翻译的教程中的Property的使用感到有些迷惑不解 ...
- Git Manual / Git使用手册 / Git, GitLab, Git Bash, TortoiseGit (建议全文复制到Word文档中通过导航窗格查看)
Git使用手册 目录 1 引言 2 Git.GitLab简介 2.1 Git 2.2 GitLab 2.3 Git基本概念 3 运行环境 4 ...
- JVM基础学习之类的加载、链接和初始化
本文我们一起讨论Java类的加载.链接和初始化. Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是 java.lang.Class类 的对象.一个Java类从字 ...
- cocos2d-x发生undefined reference to `XX'异常 一劳永逸解决办法
cocos2d-x发生undefined reference to `XX'错误 一劳永逸解决方法 参考文章: http://blog.csdn.net/kafeidev/article/detail ...
- 在eclipse中执行sql的编码问题
症状-分析: 刚才在eclipse中执行sql文件,发现数据进入数据库的时候总是乱码 后来查看MySQL的编码设置,全是UTF8,没问题,sql文件本身也是UTF8的编码 并且,使用MySQL的CMD ...
- Groovy学习()起步
安装Groovy 在Windows环境下安装Groovy 下载安装包,傻瓜安装,设置环境目录,就这样搞定. 另外还需要安装Java并且设置JAVA_HOME环境变量. 两分钟搞定. 使用groovys ...
- Unix系统编程()发送信号的其他方式:raise和killpg
有时,进程需要向自身发送信号,raise 函数就执行了这一任务. #include <signal.h> int raise(int sig); 在单线程程序中,调用raise相当于对ki ...