| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:事实证明,本人脑袋被驴T了。。。。。In Reply To:囧啊,第一次提交MLE,习惯把数组开大的结果。。数组放小后AC,不过memory还是很恐怖,8M。。。附代码 Posted by:yzhw9981 at 2009-04-26 16:20:53 # include <stdio.h>
# define INVALID -999999
int len1,len2;
char c1[101],c2[101];
int dp[101][101];
int dic[6][6]={0, 0, 0, 0, 0, 0,
0, 5,-1,-2,-1,-3,
0,-1, 5,-3,-2,-4,
0,-2,-3, 5,-2,-2,
0,-1,-2,-2, 5,-1,
0,-3,-4,-2,-1,INVALID};
void change(char *a)
{
switch(*a)
{
case 'A':
*a=1;
break;
case 'C':
*a=2;
break;
case 'G':
*a=3;
break;
case 'T':
*a=4;
break;
};
}
int max(int a,int b,int c)
{
int res=-99999999;
if(a>res) res=a;
if(b>res) res=b;
if(c>res) res=c;
return res;
}
int main()
{
int testcase,testcase_count;
scanf("%d",&testcase);
for(testcase_count=1;testcase_count<=testcase;testcase_count++)
{
scanf("%d ",&len1);
int i,j,k;
for(i=1;i<=len1;i++)
{
scanf("%c",c1+i);
change(c1+i);
}
scanf("%d ",&len2);
for(i=1;i<=len2;i++)
{
scanf("%c",c2+i);
change(c2+i);
}
/*-------------dp------------------------*/
for(i=0;i<=len1;i++)
for(j=0;j<=len2;j++)
dp[i][j]=INVALID;
dp[0][0]=0;
for(i=1;i<=len1;i++)
{
int sum=0;
for(j=1;j<=i;j++) sum+=dic[c1[j]][5];
dp[i][0]=sum;
}
for(i=1;i<=len2;i++)
{
int sum=0;
for(j=1;j<=i;j++) sum+=dic[c2[j]][5];
dp[0][i]=sum;
}
for(i=1;i<=len1;i++)
for(j=1;j<=len2;j++)
for(k=100-len2;k<=100+len1;k++)
{
dp[i][j]=max(dp[i-1][j-1]+dic[c1[i]][c2[j]],
dp[i][j-1]+dic[5][c2[j]],
dp[i-1][j]+dic[c1[i]][5]
);
}
/*------------------------end of dp------------------------*/
printf("%d\n",dp[len1][len2]);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator