Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

如果两串最后的字符相同,那么不用考虑在最后加‘——’ 的情况?

Posted by biran007 at 2008-10-09 00:28:24 on Problem 1014
如果两串最后的字符相同,那么不用考虑在最后加‘——’ 的情况?
看起来是这样子的,但是不会证明
我把AC的动态规划代码里的这段去掉之后就WA(ZOJ里面就算去掉这个条件也是AC)
我随机生成了100个输入,加不加这个条件结果完全一样
请问为什么会WA……

#include<stdio.h>
#define MAX 1000
int map[5][5]={{5,-1,-2,-1,-3},{-1,5,-3,-2,-4},{-2,-3,5,-2,-2},{-1,-2,-2,5,-1},{-3,-4,-2,-1,-100}};
char gene1[101],gene2[101];
int record[100][100];
int ctn(char c)
{
   switch(c)
   {
      case 'A': return 0;
      case 'C': return 1;
      case 'G': return 2;
      case 'T': return 3;
      case '-': return 4;       
      default:  return -1;
   }    
}
int numget(char a,char b)
{
    int i=ctn(a),j=ctn(b);    
    return map[i][j];
}
int max(int a,int b)
{return a>b? a:b;}
int f(int i,int j)
{
      if(record[i][j]!=MAX)return record[i][j];
      if(i==0)
      {
          int t=0;
          for(int k=1;k<=j;k++)         
            t+=numget(gene2[k],'-');
          record[i][j]= t;
          return t;
      }
      if(j==0)
      {
          int t=0;
          for(int k=1;k<=i;k++)         
            t+=numget(gene1[k],'-');
          record[i][j]= t;
          return t;
      }
  //   if(gene1[i]==gene2[j])
  //  {
  //       record[i][j]=f(i-1,j-1)+numget(gene1[i],gene2[j]);  
  //       return record[i][j];               
  //  }
      int t1,t2,t3;
      t1=f(i-1,j-1)+numget(gene1[i],gene2[j]),
      t2=f(i-1,j)+numget(gene1[i],'-'),
      t3=f(i,j-1)+numget('-',gene2[j]);
      record[i][j]= max(max(t1,t2),t3);
      return record[i][j];
}
int main()
{
      freopen("in.txt","r",stdin);
      freopen("out_cr.txt","w",stdout);
      int times,len1,len2;
      scanf("%d",&times);
      while(times--)
      {
         for(int i=0;i<=100;i++)
         for(int j=0;j<=100;j++)
           record[i][j]=MAX;
         scanf("%d",&len1);getchar();
         for(int i=1;i<=len1;i++)
         {
            gene1[i]=getchar();
            if(ctn(gene1[i])==-1)i=-1;
         }
         scanf("%d",&len2);getchar();
         for(int i=1;i<=len2;i++)
         {
            gene2[i]=getchar();
            if(ctn(gene2[i])==-1)i=-1;
         }
         printf("%d\n",f(len1,len2));             
      }
}
就是被//注释掉的那段代码

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator