SDUT 2080 最长公共子序列问题

很水很水的DP。课本上的模板题。

题目链接http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2080

View Code
 1 #include<stdio.h>

 2 #include<string.h>

 3 int map[510][510];

 4 char str1[510],str2[510];

 5 int main()

 6 {

 7     int len1,len2,i,j;

 8     while(gets(str1))

 9     {

10         gets(str2);

11         len1=strlen(str1);

12     len2=strlen(str2);

13     memset(map,0,sizeof(map));

14     for(i=1;i<=len1;i++)

15     {

16         for(j=1;j<=len2;j++)

17         if(str1[i-1]==str2[j-1])//注意这里是str1[i-1]==str2[j-1]

18     {

19         map[i][j]=map[i-1][j-1]+1;

20     }

21     else

22     {

23         if(map[i-1][j]>map[i][j-1])

24         map[i][j]=map[i-1][j];

25         else map[i][j]=map[i][j-1];

26     }

27     }

28     printf("%d\n",map[len1][len2]);

29     }

30     return 0;

31 }

你可能感兴趣的:(序列)