状态转移方程很容易想出,和背包思想有点像,难点在如何如何用字典树来搞dp,ps:原来在建stuct时初始化时可以节省不少时间的!!
#include#include using namespace std;const int max_node=400100;const int modn=20071027;const int son_num=26;int ch[max_node][son_num];int val[max_node];int sz;int dp[300100];struct trie{ trie() { sz=1; memset(ch,0,sizeof(ch)); memset(val,0,sizeof(val)); } int idx(char c) { return c-'a'; } void insert(char *s) { int u,c,n,i,j; u=0; n=strlen(s); for(i=0;i =0;i--) dp[i]=op.query(T,i); printf("Case %d: %d\n",cas++,dp[0]); }}