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 |
提交的时候poj又挂了 忐忑了好久上不起啊提交的时候poj又挂了 忐忑了好久上不起啊 这题让我对dp的理解终于深了一点点 这种题思路想的时候难 想到了实现代码就简单了 #include <iostream> #include <memory.h> using namespace std; int getint(char x) { switch(x) { case 'A': return 0; case 'C': return 1; case 'G': return 2; case 'T': return 3; case '-': return 4; } } int main() { int values[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,-999}; int rounds; int dp[101][101]; cin>>rounds; while(rounds--) { memset(dp,0,sizeof(dp)); int firstlen,secondlen; char first[101]; char second[101]; cin>>firstlen; for(int i=1;i<=firstlen;i++) cin>>first[i]; cin>>secondlen; for(int i=1;i<=secondlen;i++) cin>>second[i]; for(int i=1;i<=secondlen;i++) { int c=getint(second[i]); dp[0][i]=values[4][c]+dp[0][i-1]; } for(int i=1;i<=firstlen;i++) { int c=getint(first[i]); dp[i][0]=values[c][4]+dp[i-1][0]; } for(int i=1;i<=firstlen;i++) { for(int j=1;j<=secondlen;j++) { dp[i][j]=dp[i-1][j-1]+values[getint(first[i])][getint(second[j])]; if(dp[i][j]<dp[i][j-1]+values[4][getint(second[j])]) dp[i][j]=dp[i][j-1]+values[4][getint(second[j])]; if(dp[i][j]<dp[i-1][j]+values[getint(first[i])][4]) dp[i][j]=dp[i-1][j]+values[getint(first[i])][4]; } } cout<<dp[firstlen][secondlen]<<endl; } return 1; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator