【最长公共子序列】hdu 1243 反恐训练营

最长公共子序列:

  dp[i][j] :当前子弹的最大得分,

if ([i-1]==[j-1])
  dp[i][j]=dp[i-1][j-1]+score[a[i-1]];
else
  dp[i][j]=max(dp[i-1][j],dp[i][j-1]);

 1 #include <cstdio>
 2 #include <cstring>
 3
 4 const int MAXN=2000+5;
 5
 6 char t[MAXN],a[MAXN],b[MAXN];
 7 int dp[MAXN][MAXN];
 8 int score[MAXN];
 9 int n,temp;
10
11 int max(int x,int y){
12    if(x>y)return x;
13    return y;
14 }
15
16 int main()
17 {
18     while(scanf("%d",&n)!=EOF){
19         scanf("%s",t);
20         for(int i=0;i<n;i++){
21             scanf("%d",&temp);
22             score[ t[i] ]= temp;
23         }
24         scanf("%s",a);
25         scanf("%s",b);
26
27
28         int len1=strlen(a);
29         int len2=strlen(b);
30
31         memset(dp,0,sizeof dp);
32
33         for(int i=1;i<=len1;i++){
34             for(int j=1;j<=len2;j++){
35                 if (a[i-1]==b[j-1])
36                     dp[i][j]=dp[i-1][j-1]+score[a[i-1]];
37                 else
38                     dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
39             }
40         }
41         printf("%d\n",dp[len1][len2] );
42     }
43 }
时间: 2024-10-11 06:57:03

【最长公共子序列】hdu 1243 反恐训练营的相关文章

HDU 1243 反恐训练营 (动态规划求最长公共子序列)

反恐训练营 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3040    Accepted Submission(s): 693 Problem Description 当今国际反恐形势很严峻,特别是美国"9.11事件"以后,国际恐怖势力更是有恃无恐,制造了多起骇人听闻的恐怖事件.基于此,各国都十分担心恐怖势力会对本国社会造

!HDU 1243 反恐训练营--dp--(最长公共子序列)

题意:给你一个子弹序列和恐怖分子序列,只有子弹打到对应序号的恐怖分子才能得分,每个恐怖分子有对应的分数,求最大的得分 分析:这题抽象出来的模型就是最长公共子序列,直接套公式:dp[i][j]表示用第i颗子弹打第j个恐怖分子时能得到的最大分数,注意这指的是从开始状态到这一状态这个过程的最优解,而不是这一状态的最优解:状态转移:1.当a[i]==b[j]时,dp[i][j]=dp[i-1][j-1]+v,v是恐怖分子b[j]的分数:2.否则,dp[i][j]=max(dp[i-1][j-1],dp[

hdu 1243 反恐训练营

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[2048][2048]; int main() { int i,j,n,s[500],t; char s1[2048],s2[2048],s3[2048]; while(~scanf("%d",&n)) { scanf("%s",s3); for(i=0;i&

最长公共子序列 [HDU 1159] Common Subsequence

Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 23973    Accepted Submission(s): 10592 Problem Description A subsequence of a given sequence is the given sequence with some e

杭电acm 1243 反恐训练营 LCS

反恐训练营 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6183    Accepted Submission(s): 1592Problem Description 当今国际反恐形势很严峻,特别是美国"9.11事件"以后,国际恐怖势力更是有恃无恐,制造了多起骇人听闻的恐怖事件.基于此,各国都十分担心恐怖势力会对本国社会造成

【HDOJ】1243 反恐训练营

LCS. 1 /* 1243 */ 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 6 #define MAXN 2025 7 #define MAXM 256 8 9 char type[MAXM]; 10 int point[MAXM]; 11 12 char bullet[MAXN]; 13 char kbfz[MAXN]; 14 int dp[MAXN][MAXN]; 15 int

HDU 1243 最长公共子序列

反恐训练营 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2850    Accepted Submission(s): 648 Problem Description 当今国际反恐形势很严峻,特别是美国“9.11事件”以后,国际恐怖势力更是有恃无恐,制造了多起骇人听闻的恐怖事件.基于此,各国都十分担心恐怖势力会对本国社会造成的不稳定,

hdu 1159 Common Subsequence(最长公共子序列 DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 25416    Accepted Submission(s): 11276 Problem Description A subsequence of

hdu 1159 common sequence (最长公共子序列 dp)

http://acm.hdu.edu.cn/showproblem.php?pid=1159 题意 : 给出两个字符串 求出最长公共子序列 思路: if(str1[i]==str2[j]) { dp[i][j]=max(dp[i-1][j-1]+1,max(dp[i-1][j],dp[i][j-1])); } else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); #include<cstdio> #include<cstring> #include&l