码迷,mamicode.com
首页 > 其他好文 > 详细

poj1080 dp

时间:2014-08-14 13:23:28      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   ar   

bubuko.com,布布扣
 1 //Accepted    200 KB    0 ms
 2 //dp
 3 //dp[i][j]表示s1用前i个,s2用前j个字符能得到的最大分数
 4 //dp[i][j]=max(dp[i-1][j]+score[s1[i-1]][‘-‘],
 5 //             dp[i][j-1]+score[[‘-‘][s2[j-1]],
 6 //             dp[i-1][j-1]+score[s1[i-1]][s2[j-1]])
 7 //注意初始化
 8 //dp[0][0]=0;
 9 //dp[0][i]=dp[0][i-1]+score[‘-‘][s2[i-1]]
10 //dp[i][0]=dp[i-1][0]+score[s1[i-1]][‘-‘]
11 //还要初始化dp[i][j]=-inf;
12 #include <cstdio>
13 #include <cstring>
14 #include <iostream>
15 using namespace std;
16 const int imax_n = 105;
17 const int inf = -1000000;
18 int dp[imax_n][imax_n];
19 int n1,n2;
20 char s1[imax_n];
21 char s2[imax_n];
22 int getScore(char ch1,char ch2)
23 {
24     if (ch1==ch2) return 5;
25     if (ch1==A && ch2==C) return -1;
26     if (ch1==A && ch2==G) return -2;
27     if (ch1==A && ch2==T) return -1;
28     if (ch1==A && ch2==-) return -3;
29     if (ch1==C)
30     {
31         if (ch2==A) return -1;
32         if (ch2==G) return -3;
33         if (ch2==T) return -2;
34         if (ch2==-) return -4;
35     }
36     if (ch1==G)
37     {
38         if (ch2==A) return -2;
39         if (ch2==C) return -3;
40         if (ch2==T) return -2;
41         if (ch2==-) return -2;
42     }
43     if (ch1==T)
44     {
45         if (ch2==A) return -1;
46         if (ch2==C) return -2;
47         if (ch2==G) return -2;
48         if (ch2==-) return -1;
49     }
50     if (ch1==-)
51     {
52         if (ch2==A) return -3;
53         if (ch2==C) return -4;
54         if (ch2==G) return -2;
55         if (ch2==T) return -1;
56     }
57 }
58 void Dp()
59 {
60     //memset(dp,0,sizeof(dp));
61     dp[0][0]=0;
62     for (int i=1;i<=n1;i++)
63     dp[i][0]=dp[i-1][0]+getScore(s1[i-1],-);
64     for (int i=1;i<=n2;i++)
65     dp[0][i]=dp[0][i-1]+getScore(-,s2[i-1]);
66     for (int i=1;i<=n1;i++)
67     {
68         for (int j=1;j<=n2;j++)
69         {
70             dp[i][j]=inf;
71             if (dp[i][j-1]+getScore(-,s2[j-1])>dp[i][j])
72             dp[i][j]=dp[i][j-1]+getScore(-,s2[j-1]);
73             if (dp[i][j]<dp[i-1][j]+getScore(s1[i-1],-))
74             dp[i][j]=dp[i-1][j]+getScore(s1[i-1],-);
75             if (dp[i][j]<dp[i-1][j-1]+getScore(s1[i-1],s2[j-1]))
76             dp[i][j]=dp[i-1][j-1]+getScore(s1[i-1],s2[j-1]);
77         }
78     }
79     printf("%d\n",dp[n1][n2]);
80 }
81 int main()
82 {
83     int T;
84     scanf("%d",&T);
85     while (T--)
86     {
87         scanf("%d",&n1);
88         scanf("%s",s1);
89         scanf("%d",&n2);
90         scanf("%s",s2);
91         Dp();
92     }
93     return 0;
94 }
View Code

 

poj1080 dp,布布扣,bubuko.com

poj1080 dp

标签:style   blog   http   color   os   io   for   ar   

原文地址:http://www.cnblogs.com/djingjing/p/3911919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!