A Za, A Za, Fighting...

坚信:勤能补拙

PKU 2250 Compromise

问题:
http://acm.pku.edu.cn/JudgeOnline/problem?id=2250

思路:
以单词为单位的LCS,另外需要记录路径信息

代码:
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #define MAX_NUM 101
 5 #define MAX_LEN 31
 6 char first[MAX_NUM][MAX_LEN];
 7 char second[MAX_NUM][MAX_LEN];
 8 int fcnt, scnt;
 9 int table[MAX_NUM][MAX_NUM];
10 char path[MAX_NUM][MAX_NUM];
11 
12 void
13 output(int i, int j)
14 {
15     if(i==0 || j==0)
16         return;
17     if(path[i][j] == 'u')
18         output(i-1, j);
19     else if(path[i][j] == 'l')
20         output(i, j-1);
21     else {
22         output(i-1, j-1);
23         printf("%s ", first[i-1]);
24     }
25 }
26 
27 void
28 lcs()
29 {
30     int i, j;
31     for(i=0; i<=fcnt; i++)
32         table[i][0= 0;
33     for(j=0; j<=scnt; j++)
34         table[0][j] = 0;
35     for(i=1; i<=fcnt; i++) {
36         for(j=1; j<=scnt; j++) {
37             if(strcmp(first[i-1], second[j-1]) == 0) {
38                 table[i][j] = table[i-1][j-1+ 1;
39                 path[i][j] = 'y';
40             } else if(table[i-1][j] > table[i][j-1]) {
41                 table[i][j] = table[i-1][j];
42                 path[i][j] = 'u';
43             } else {
44                 table[i][j] = table[i][j-1];
45                 path[i][j] = 'l';
46             }
47         }
48     }
49 }
50 
51 int
52 main(int argc, char **argv)
53 {
54     while(1) {
55         fcnt = scnt = 0;
56         memset(table, 0sizeof(table));
57         memset(path, 0sizeof(path));
58         if(scanf("%s", first[fcnt++]) == EOF)
59             break;
60         while(scanf("%s", first[fcnt]) && first[fcnt][0]!='#')
61             ++fcnt;
62         while(scanf("%s", second[scnt]) && second[scnt][0]!='#')
63             ++scnt;
64         lcs();
65         output(fcnt, scnt);
66         printf("\n");
67     }
68 }

posted on 2010-08-12 15:32 simplyzhao 阅读(123) 评论(0)  编辑 收藏 引用 所属分类: C_动态规划


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜