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

History Grading

时间:2014-07-16 16:05:53      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   art   

uva111:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=47

题意:看懂之后就是求两个串的最长公共子串。

题解:不过这里要注意一下,就是题目中假如说第一个数是2,表示事件1应该放在第二个位子,这样转化一下就可以了。以前集训的时候也搞过这样的东西,但是年代久远,往事早已随风而去。今天复习了一下,发现很简单的说,就是输出公共子序列的地方卡了一下。

bubuko.com,布布扣
 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 #include<cstdio>
 5 using namespace std;
 6 int c[100][100],b[100][100];//c[i][j]表示到a串第i位b串第j位所取得的最大长度,
 7 char A[100],B[100];//b数组是用来记录的,便于DFS输出
 8 int n,temp;
 9 void PrintLCS(char *str1, int i, int j)  {
10     if(i==0 || j==0)
11         return ;
12     if(b[i][j]==0){//表示原来的串中a,b是相同的
13         PrintLCS(str1, i-1, j-1);
14         printf("%c",str1[i-1]);
15     }
16     else if(b[i][j]==1)//表示a串的第i位没有取,跳过
17         PrintLCS(str1, i-1, j);
18     else
19         PrintLCS(str1, i, j-1);//表示b串的第j位没有取,跳过
20 }
21 int lcs(char* A,char * B){
22     int x=strlen(A);
23     int y=strlen(B);
24     memset(c,0,sizeof(c));
25     memset(b,0,sizeof(b));
26     for(int i=1;i<=x;i++){
27         for(int j=1;j<=y;j++){
28             if(A[i-1]==B[j-1]){
29                c[i][j]=c[i-1][j-1]+1;
30                b[i][j]=0;
31             }
32             else  if(c[i-1][j]>c[i][j-1]){//表示a串的第i位没有取,跳过
33                 c[i][j]=c[i-1][j];
34                 b[i][j]=1;
35             }
36             else{
37               c[i][j]=c[i][j-1];//表示b串的第j位没有取,跳过
38                 b[i][j]=-1;
39             }
40         }
41     }
42     //PrintLCS(A, x, y);
43     return c[x][y];
44 }
45 
46 int main(int argc, char const *argv[]){
47 
48      scanf("%d",&n);
49     for(int i=1;i<=n;i++){//把数字转化成字符串
50         scanf("%d",&temp);
51         A[temp-1]=a+i-1;
52     }
53     while(~scanf("%d",&temp)){
54          B[temp-1]=a;
55        for(int i=2;i<=n;i++){//把数字转化成字符串
56         scanf("%d",&temp);
57         B[temp-1]=a+i-1;
58        }
59       cout<<lcs(A,B)<<endl;
60     }
61     return 0;
62 }
View Code

History Grading,布布扣,bubuko.com

History Grading

标签:style   blog   http   color   os   art   

原文地址:http://www.cnblogs.com/chujian123/p/3848635.html

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