题目:给你一个字符串,统计其中能找到多少个构成seven的子序列。
分析:dp。按单词的字母顺序DP,每个字母统计他前面字串的个数。
说明:(2011-09-19 14:03)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DataSize 10005
char str[ DataSize ];
char data[] = "0seven";
long long seven[ 6 ][ DataSize ];
int main()
{
while ( scanf("%s",str) != EOF ) {
int len = strlen( str );
for ( int i = 0 ; i < len ; ++ i )
if ( str[ i ] >= 'A' && str[ i ] <= 'Z' )
str[ i ] = str[ i ] - 'A' + 'a';
memset( seven, 0, sizeof( seven ) );
for ( int i = 0 ; i < len ; ++ i )
seven[ 0 ][ i ] = 1;
seven[ 1 ][ 0 ] = (str[ 0 ]=='s');
for ( int k = 1 ; k <= 5 ; ++ k )
for ( int i = 1 ; i < len ; ++ i )
if ( str[ i ] == data[ k ] )
seven[ k ][ i ] = seven[ k ][ i-1 ] + seven[ k-1 ][ i-1 ];
else
seven[ k ][ i ] = seven[ k ][ i-1 ];
printf("%lld\n",seven[ 5 ][ len-1 ]);
}
return 0;
}