2012蓝桥杯C组本科决赛答案
题目:
脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。
DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。
为了简化问题,我们假设,DNA在复制的时候可能出现的偏差是(理论上,对每个碱基被复制时,都可能出现偏差):
1. 漏掉某个脱氧核苷酸。例如把 AGGT 复制成为:AGT
2. 错码,例如把 AGGT 复制成了:AGCT
3. 重码,例如把 AGGT 复制成了:AAGGT
如果某DNA串a,最少要经过 n 次出错,才能变为DNA串b,则称这两个DNA串的距离为 n。
例如:AGGTCATATTCC 与 CGGTCATATTC 的距离为 2
你的任务是:编写程序,找到两个DNA串的距离。
【输入、输出格式要求】
用户先输入整数n(n<100),表示接下来有2n行数据。
接下来输入的2n行每2行表示一组要比对的DNA。(每行数据长度<10000)
程序则输出n行,表示这n组DNA的距离。
例如:用户输入:
3
AGCTAAGGCCTT
AGCTAAGGCCT
AGCTAAGGCCTT
AGGCTAAGGCCTT
AGCTAAGGCCTT
AGCTTAAGGCTT
则程序应输出:
1
1
2
我的解答如下:
动态方程:如果str1[i]==str2[j],dp[i][j]=Min(dp[i-1][j-1],dp[i][j-1]+1,dp[i-1][j]+1);
如果str1[i]!=str2[j],dp[i][j]=Min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1;
前段时间贴的代码有错,现在改过来了
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int dp[][];
int Min(int a,int b,int c)
{
int temp;
temp=a<b?a:b;
return temp<c?temp:c;
}
void init()
{
int i,j;
memset(dp,,sizeof(dp));
for(i=;i<=;i++)
dp[][i]=i;
}
int main()
{
char str1[],str2[];
int i,j;
int T;
scanf("%d",&T);
while(T--)
{
init();
scanf("%s%s",&str1,&str2);
int l1,l2;
l1=strlen(str1);
l2=strlen(str2);
int now=,pre=;
for(i=;i<l1;i++)//求最长公共子序列的思想。
{
now^=;
pre^=;
dp[now][]=i+;
for(j=;j<l2;j++)
{ if(str1[i]==str2[j])
dp[now][j+]=Min(dp[pre][j],dp[pre][j+]+,dp[now][j]+);
else
dp[now][j+]=Min(dp[pre][j+],dp[now][j],dp[pre][j])+;
}
}
printf("%d\n",dp[now][l2]);
}
return ;
}
最后一题解答:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int map[][];
int num[][];
char H[];
int ff=;
int n=;
void dfs(int x,int y)
{
int i,j;
if(x==)
{
ff=;
cout<<n++<<endl;
for(i=;i<=;i++)
{ for(j=;j<=;j++)
{
printf("%c",H[map[i][j]]);
}
printf("\n");
}
return ;
}
int div=num[x][y];
int f=;
if(map[x][y]==-)
for(i=;i<=;i++)
{
f=;
for(j=;j<;j++)
if(map[j][y]==i)
{f=;break;}
for(j=;j<;j++)
if(map[x][j]==i)
{f=;break;}
for(j=;j<=;j++)
for(int k=;k<=;k++)
if(num[j][k]==div&&map[j][k]==i)
{f=;break;}
if(f)
continue;
map[x][y]=i;
if(y<=)
dfs(x,y+);
else
dfs(x+,);
map[x][y]=-;
}
else
{
if(y<=)
dfs(x,y+);
else
dfs(x+,);
}
return ;
}
int pre[],now[];
void init()
{
memset(map,-,sizeof(map));
memset(num,-,sizeof(num));
H[]='A';
H[]='B';
H[]='C';
H[]='D';
H[]='E';
H[]='F';
ff=;
}
int main()
{
int i,j;
int T;
char str[];
init();
for(i=;i<=;i++)
{
scanf("%s",&str);
for(j=;j<=;j++)
num[i][j]=str[j]-'';
}
//cout<<"ok"<<endl;
scanf("%d",&T);
while(T--)
{
scanf("%s",&str);
map[str[]-''][str[]-'']=str[]-'A';
}
//cout<<"ok"<<endl;
dfs(,);
if(!ff)
printf("无解\n");
return ;
}
2012蓝桥杯C组本科决赛答案的更多相关文章
- java算法 第七届 蓝桥杯B组(题+答案) 4.分小组
4.分小组 (代码填空) 9名运动员参加比赛,需要分3组进行预赛.有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I下面的程序列出了所有的分组方法. 该程序的正常输出为:ABC DEF ...
- java算法 第七届 蓝桥杯B组(题+答案) 10.压缩变换
10.压缩变换 (程序设计) 小明最近在研究压缩算法.他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比.然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些 ...
- java算法 第七届 蓝桥杯B组(题+答案) 9.取球博弈
9.取球博弈 (程序设计) 两个人玩取球的游戏.一共有N个球,每人轮流取球,每次可取集合{n1,n2,n3}中的任何一个数目.如果无法继续取球,则游戏结束.此时,持有奇数个球的一方获胜.如果两人都是 ...
- java算法 第七届 蓝桥杯B组(题+答案) 8.四平方和
8.四平方和 (程序设计) 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和.如果把0包括进去,就正好可以表示为4个数的平方和. 比如:5 = 0^2 + 0^2 + ...
- java算法 第七届 蓝桥杯B组(题+答案) 7.剪邮票
7.剪邮票 (结果填空) 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红 ...
- java算法 第七届 蓝桥杯B组(题+答案) 6.方格填数
6.方格填数 (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...
- java算法 第七届 蓝桥杯B组(题+答案) 5.抽签
5.抽签 (代码填空) X星球要派出一个5人组成的观察团前往W星.其中:A国最多可以派出4人.B国最多可以派出2人.C国最多可以派出2人..... 那么最终派往W星的观察团会有多少种国别的不同组合呢 ...
- java算法 第七届 蓝桥杯B组(题+答案) 3.凑算式
3.凑算式 (结果填空) B DEFA + --- + ------- = 10 C GHI (如果显示有问题,可以参见[图1.jpg]) 这个算式中A~ ...
- java算法 第七届 蓝桥杯B组(题+答案) 2.生日蜡烛
2.生日蜡烛 (结果填空) 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛.现在算起来,他一共吹熄了236根蜡烛.请问,他从多少岁开始过生日party的?请填写他开 ...
随机推荐
- 使用CocoaPods管理依赖库
本篇内容将介绍Mac和iOS开发中必备的一个依赖库管理工具CocoaPods. CocoaPods是什么 在iOS开发中势必会用到一些第三方依赖库,比如大家都熟悉的ASIHttpRequest.AFN ...
- Android问题-新电脑新系统WIN764位上安装简版本的XE8提示“Unit not found: 'System'”
问题现象:电脑太慢,重安新系统,所以要安DELPHIXE8,但安装过程中出现二次杀软件提示,我都选的是通过.但是XE8过程到最后的"Create AVD"时出现一个错误(具体是什么 ...
- #elif
http://baike.sogou.com/v72031124.htm?fromTitle=%23elif #else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后 ...
- memcached全面剖析–4. memcached的分布式算法
memcached的分布式 正如第1次中介绍的那样, memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能. 服务器端仅包括 第2次. 第3次 前坂介绍的内存存储功能,其实现 ...
- <a href="javascript:void(0);" id='test' onclick="javascript:alert('即将上线,敬请期待!');"><em class="rmwd"></em>征稿平台</a>
<a href="javascript:void(0);" id='test' onclick="javascript:alert('即将上线,敬请期待!');&q ...
- IOC使用Unity 实现依赖注入
转自:http://www.cnblogs.com/techborther/archive/2012/01/06/2313498.html http://www.cnblogs.com/xishuai ...
- weak nonatomic strong等介绍(ios)
@property的属性weak nonatomic strong等介绍(ios) 2014-12-02 18:06 676人阅读 评论(0) 收藏 举报 学习ios也已经快半个月了,也尝试做简单的应 ...
- Codeforces Round #280 (Div. 2) D. Vanya and Computer Game 二分
D. Vanya and Computer Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...
- delphi Caption 垂直显示标签文本
//垂直显示标签文本 Label1.Caption:='垂'+#13+'直'+#13+'显'+#13+'示';//使用相同的方法,我们也可以制作垂直显示的提示(Hint):button1.Hint:= ...
- HDU 1080 DP
匹配两个人相似度. A,G,C.T.每两个都会有一个相应的值,给出两串基因.长度能够不一样,能够在基因中间加_使两串长度一样.然后有一个相应值.求最大相应值. 先做出相应的表 DP方程: x=dp[i ...