HDU4545+LCS

最长公共子序列。

 1 /*

 2 LCS 最长公共子序列

 3 */

 4 #include<stdio.h>

 5 #include<string.h>

 6 #include<stdlib.h>

 7 #include<algorithm>

 8 #include<iostream>

 9 #include<queue>

10 #include<map>

11 #include<math.h>

12 using namespace std;

13 typedef long long ll;

14 //typedef __int64 int64;

15 const int maxn = 1005;

16 const int inf = 0x7fffffff;

17 const double pi=acos(-1.0);

18 const double eps = 1e-8;

19 int dp[ maxn ][ maxn ];

20 char s1[ maxn ],s2[ maxn ];

21 bool ss[ 30 ][ 30 ];

22 //map<char,char>mp;

23 void init(){

24     memset( dp,0,sizeof( dp ) );

25     //for( int i=0;i<26;i++ ){

26         //mp[ 'a'+i ] = '@';

27     //}

28     memset( ss,false,sizeof( ss ) );

29 }

30 bool same( int x,int y ){

31     if( s1[x]==s2[y]||ss[s2[y]-'a'][s1[x]-'a']==true ) return true;

32     else return false;

33 }

34 int main(){

35     int T;

36     while( scanf("%d",&T)!=EOF ){

37         int Case = 1;

38         while( T-- ){

39             scanf("%s",s1);

40             scanf("%s",s2);

41             init();

42             int q;

43             scanf("%d",&q);

44             char a[12],b[12];

45             while( q-- ){

46                 scanf("%s",a);

47                 scanf("%s",b);

48                 ss[a[0]-'a'][b[0]-'a']=true;

49                 //mp[ a[0] ] = b[0];

50             }

51             int len1 = strlen( s1 );

52             int len2 = strlen( s2 );

53             for( int i=0;i<=len1;i++ )

54                 dp[ i ][ 0 ] = 0;

55             for( int i=0;i<=len2;i++ )

56                 dp[ 0 ][ i ] = 0;

57             for( int i=1;i<=len1;i++ ){

58                 for( int j=1;j<=len2;j++ ){

59                     if( same( i-1,j-1 )==true )

60                         dp[ i ][ j ] = dp[ i-1 ][ j-1 ]+1;

61                     else

62                         dp[ i ][ j ] = max( dp[i-1][j],dp[i][j-1] );

63                     //printf("dp[%d][%d]=%d\n",i,j,dp[i][j]);

64                 }

65             }

66             if( dp[len1][len2]!=len1 ) printf("Case #%d: unhappy\n",Case++);

67             else printf("Case #%d: happy\n",Case++);

68         }

69     }

70     return 0;

71 }
View Code

 

你可能感兴趣的:(HDU)