From 52610b2cf6823f4118a9a339755e28df3d542dcd Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Tue, 2 Aug 2016 13:13:00 +0800 Subject: [PATCH] Create 1080.cpp --- HDOJ/1080.cpp | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 HDOJ/1080.cpp diff --git a/HDOJ/1080.cpp b/HDOJ/1080.cpp new file mode 100644 index 0000000..177e5b4 --- /dev/null +++ b/HDOJ/1080.cpp @@ -0,0 +1,67 @@ +#include +#include +#include +#include +using namespace std; +char stra[128]; +char strb[128]; +#define MAXL 105 +int dp[MAXL][MAXL]; +int label(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 4;/// Here if c=='\0' , we should regard it as a '-'; + } +} +int trans[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,0 + } +}; +int main() +{ + int t; + scanf("%d",&t); + while(t--) + { + int a,b; + scanf("%d %s %d %s",&a,stra+1,&b,strb+1); + memset(dp,0,sizeof(int)*MAXL*MAXL); + /// Init this dp array (Why?) + int n=max(a,b); + for(int ci=1;ci<=n;ci++) + { + dp[0][ci]=dp[0][ci-1]+trans[label('-')][label(strb[ci])]; + dp[ci][0]=dp[ci-1][0]+trans[label(stra[ci])][label('-')]; + } + + for(int i=1;i<=a;i++) + { + for(int j=1;j<=b;j++) + { + dp[i][j]=max(max(dp[i-1][j]+trans[label(stra[i])][label('-')],dp[i][j-1]+trans[label('-')][label(strb[j])]),dp[i-1][j-1]+trans[label(stra[i])][label(strb[j])]); + } + } + printf("%d\n",dp[a][b]); + } + return 0; +}