ZOJ 1642 Match for Bonus

DP水题。最长公共子序列,稍稍变形即可。模型完全一样。

View Code
 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 #define MAX 2012
 5 int dp[MAX][MAX],v[200];
 6 char a[MAX],b[MAX];
 7 int main()
 8 {
 9     int n,i,j;
10     while(cin>>n)
11     {
12         char ch;
13         int value;
14         memset(v,0,sizeof(0));
15         memset(dp,0,sizeof(0));
16         for(i = 1;i <= n;i++)
17         {
18             cin>>ch;
19             cin>>value;
20             v[ch] = value;
21         }
22         cin>>a>>b;
23         int lena = strlen(a);
24         int lenb = strlen(b);
25         int len = max(lena,lenb);
26         int ans = 0;
27         for(i = 1;i <= len;i++)
28             for(j = 1;j <= len;j++)
29             {
30                 dp[i][j] = max(dp[i - 1][j],dp[i][j - 1]);
31                 if(a[i - 1] == b[j - 1])
32                     dp[i][j] = max(dp[i][j],dp[i - 1][j - 1] + v[a[i - 1]]);
33                 if(dp[i][j] > ans)
34                     ans = dp[i][j];
35             }
36         cout<<ans<<endl;
37     }
38     return 0;
39 }

 

posted @ 2012-04-11 15:41  浙西贫农  阅读(113)  评论(0编辑  收藏  举报