_xiaobai_

导航

zoj2202 Alphacode(DP)

/*
 Fiba数列类似物 F[ n ] = F[ n-1 ] + F[ n-2 ];
 最大值为: Fiba[ 500 ];
 关键:* 一定要注意 0 只能和前面的组成一个 *
*/

View Code
 1 #include <stdio.h>
2 #include <string.h>
3
4 using namespace std;
5
6 int F[ 10005 ][ 200 ];
7 char C[ 10005 ];
8
9 int number( char a, char b )
10 {
11 return 10*(a-'0')+b-'0';
12 }
13
14 int main()
15 {
16 while ( scanf("%s",&C[ 1 ]) && C[ 1 ] != '0' ) {
17 memset( F, 0, sizeof( F ) );
18 F[ 0 ][ 0 ] = 1;F[ 1 ][ 0 ] = 1;
19 int L = strlen( &C[ 1 ] );
20 for ( int i = 2 ; i <= L ; ++ i ) {
21 if ( C[ i ] != '0' )
22 for ( int k = 0 ; k <= 150 ; ++ k )
23 F[ i ][ k ] = F[ i-1 ][ k ];
24 if ( C[ i-1 ] != '0' && number( C[ i-1 ], C[ i ] ) <= 26 )
25 for ( int k = 0 ; k <= 150 ; ++ k ) {
26 F[ i ][ k ] += F[ i-2 ][ k ];
27 if ( F[ i ][ k ] >= 10 ) {
28 F[ i ][ k+1 ] += F[ i ][ k ]/10;
29 F[ i ][ k ] %= 10;
30 }
31 }
32 }
33 int start = 150;
34 while ( !F[ L ][ start ] ) -- start;
35 while ( start >= 0 )
36 printf("%d",F[ L ][ start -- ]);
37 printf("\n");
38 }
39 return 0;
40 }

posted on 2011-08-17 14:22  _xiaobai_  阅读(252)  评论(0编辑  收藏  举报