DNA序列
来源:互联网 发布:jenkins windows节点 编辑:程序博客网 时间:2024/05/14 16:31
DNA序列
- Description
来自JSSI(Jinkela State Scientific Institute)的科学家们尝试制造一个长度为N并且只包含A的DNA序列,不出意外地失败了。他们得到了一个含有A和B两种部件的序列。现在他们打算对实验结果进行篡改,来得到一个全部是A的序列。篡改的方式有两种:
- 更改某一位上部件的状态(A变成B,B变成A)
- 更改某个前缀内所有部件的状态
两种操作的代价都为1。
你的任务自然是求最小代价。
- Input Format
第一行为N,序列长度。
第二行是一个长度为N且只包含A和B的字符串,表示初始序列。
- Output Format
最小代价。
- Sample Input
12
AAABBBAAABBB
- Sample Output
4
- Hint
【数据范围】
对于10%的数据,N<=10
对于70%的数据,N<=100000
对于100%的数据,N<=1000000
- 分析
用F1[i]记录把前i个翻成A的最少步数,F2[i]记录把前i个翻成B的最少步数。
#include <queue>#include <stack>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int F1[1000006],F2[1000006],n;char ch;int main(){ freopen("dna.in","r",stdin); freopen("dna.out","w",stdout); scanf("%d\n",&n); memset(F1,127,sizeof(F1)); memset(F2,127,sizeof(F2)); F1[0]=F2[0]=0; for (int i=1;i<=n;i++){ scanf("%c",&ch); if (ch=='A') F1[i]=min(F1[i-1],F2[i-1]+1),F2[i]=(F1[i-1]+2,F2[i-1]+1); else F1[i]=min(F1[i-1]+1,F2[i-1]+2),F2[i]=min(F1[i-1]+1,F2[i-1]); } printf("%d",min(F1[n],F2[n]+1)); fclose(stdin); fclose(stdout); return 0;}
0 0
- DNA序列
- DNA序列
- DNA序列
- DNA序列
- DNA序列
- DNA序列
- DNA序列
- *DNA序列
- DNA序列
- DNA序列
- DNA序列
- DNA序列(DNA Consensus String)
- DNA序列剖面
- 预定义DNA序列
- 1390 DNA序列
- matlab提取DNA序列
- 华为OJ:DNA序列
- 1.DNA序列
- fragment 调用startActivityForResult 问题
- javaScript实例
- ICESat-2以及MABEL数据相关
- [CF708C]Centroids
- Oracle11g bbed install and example
- DNA序列
- emmet用法
- 2016普级组模拟试题(20161114) 平台
- NOIP2016提高A组集训第16场11.15 总结
- Vuex速学篇:(1)基本套路
- HTML常用标签整理(k类)
- 第k大的数
- Lisp实现多义线闭合
- leetcode oj java Find All Anagrams in a String