| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
那是求最长公共子串的,不是最长升序公共子串In Reply To:Re:谁能指点一下吗?(2127)我采用了课本上的标程,居然还WA,哪位大虾给我浇浇火 Posted by:hujk2008 at 2004-12-03 22:38:01 > #include<iostream>
>
> using namespace std;
>
> const int MAXN = 508 ;
>
> __int64 a[MAXN] , b[MAXN] ;
> __int64 count[MAXN][MAXN] = { 0 };
> char map[MAXN][MAXN] ;
> int n1 , n2 ;
>
> void solve( void )
> {
> int i , j ;
> for( i = 1; i < MAXN ;i ++ )
> count[i][0] = count[0][i] = 0 ;
> for( i = 1 ; i <= n1 ; i ++ )
> for( j = 1; j <= n2 ;j ++ )
> {
> if( a[i] == b[j] )
> {
> count[i][j] = count[i - 1][j - 1] + 1 ;
> map[i][j] = '\\';
> }
> else if( count[i - 1][j] >= count[i][j - 1] )
> {
> count[i][j] = count[i - 1][j] ;
> map[i][j] ='|' ;
> }
> else
> {
> count[i][j] = count[i][ j - 1] ;
> map[i][j] = '-';
> }
> }
> return ;
> }
>
> void LST ( int x , int y )
> {
> if( x == 0 || y == 0 ) return ;
> if( map[x][y] == '\\' )
> {
> LST( x - 1 , y - 1 );
> //cout << a[x] <<' ' ;
> printf("%I64d ",a[x] ) ;
> }
> else if( map[x][y] == '|' )
> LST( x - 1 , y ) ;
> else LST( x , y - 1 ) ;
> return ;
> }
>
>
> int main( void )
> {
> int i ;
> //cin >> n1 ;
> scanf("%d",&n1 ) ;
> for( i = 1 ;i <= n1 ; i ++ )
> // cin >> a[i] ;
> scanf("%I64d",&a[i] ) ;
> // cin >> n2 ;
> scanf("%d",&n2 ) ;
> for( i = 1 ;i <= n2 ; i ++ )
> // cin >> b[i] ;
> scanf("%I64d",&b[i] ) ;
> solve() ;
> // cout << count[n1][n2] << endl ;
> printf("%d\n",count[n1][n2] ) ;
> LST( n1 , n2 );
> //cout << endl ;
> printf("\n") ;
> return 0 ;
> }
>
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator