茅厕顿开的一道DP题!那真是!突然知道了想通了!那编出来的速度真是快啊!
抓牢DP的特征,构建DP方程~ 嘿嘿~
/*
ID:sevenst4
LANG:C++
PROG:prefix
*/
#include<stdio.h>
#include<iostream>
#define MAXN 200001
using namespace std;int dp[MAXN];
char item[201][12];
char date[MAXN];
int len,icnt;int strlen( char *a )
{int ret=0;while( a[ret]!='\0' ) ret++;return ret;
}
void input()
{for( int i=0;i<MAXN;i++ ) dp[i]=0;icnt=0;char a[800];while( true ){scanf( "%s",item[icnt] );if( item[icnt][0]=='.' )break;icnt++;}len=0;while( scanf("%s",a)!=EOF ){for( int i=0;i<strlen(a);i++ )date[len++]=a[i];}
}bool judge( int i,int j )
{for( int k=0;k<strlen(item[j]);k++ )if( date[i+k]!=item[j][k] )return false;return true;
}int max( int a,int b ){ return a>b?a:b; }void dowork()
{for( int i=len-1;i>=0;i-- ){for( int j=0;j<icnt;j++ ){if( judge(i,j) )dp[i]=max( dp[i],dp[i+strlen(item[j])]+strlen(item[j]));}}
}int main()
{freopen( "prefix.in","r",stdin );freopen( "prefix.out","w",stdout );input();dowork();printf( "%d\n",dp[0] );return 0;
}
遇到的麻烦就是语言的问题了~ 现在C 和 C++ 混着弄 自己都弄不清到底写的是什么了!