先上题目:
Time Limit: 2000/1000 MS
(Java/Others) Memory Limit: 65536/32768 K
(Java/Others)
Total Submission(s): 2783 Accepted
Submission(s): 634
1 #include <cstdio> 2 #include <cstring> 3 #define max(x,y) (x > y ? x : y) 4 #define MAX 10002 5 using namespace std; 6 7 char a[MAX]; 8 char b[MAX]; 9 int s[MAX]; 10 int n; 11 int dp[10][MAX]; 12 13 14 15 int main() 16 { 17 int l1,l2,maxn; 18 //freopen("data.txt","r",stdin); 19 while(scanf("%d",&n)!=EOF){ 20 getchar(); 21 scanf("%s",a); 22 l1=strlen(a); 23 memset(s,0,sizeof(s)); 24 for(int i=0;i<l1;i++){ 25 scanf("%d",&s[a[i]-‘a‘]); 26 } 27 getchar(); 28 scanf("%s",a+1); 29 scanf("%s",b+1); 30 l1=strlen(a+1); 31 l2=strlen(b+1); 32 memset(dp,0,sizeof(dp)); 33 maxn=0; 34 for(int i=1;i<=l1;i++){ 35 for(int j=1;j<=l2;j++){ 36 if(a[i]==b[j]){ 37 dp[i%10][j]=dp[(i-1+10)%10][j-1]+s[a[i]-‘a‘]; 38 }else{ 39 dp[i%10][j]=max(dp[(i-1+10)%10][j],dp[i%10][j-1]); 40 } 41 maxn=max(dp[i%10][j],maxn); 42 } 43 } 44 printf("%d\n",maxn); 45 } 46 return 0; 47 }
HDU - 1243 - 反恐训练营,布布扣,bubuko.com
原文:http://www.cnblogs.com/sineatos/p/3572656.html