POJ 3267 The Cow Lexicon
这是个DP题,很简单。
题目大意:
给定一个字符串和N个单词,要求从字符串中去掉最少的字符后能够被这些单词表示。
直接贴代码:
#include <stdio.h> #include <string.h> const int M = 605; int len[M],dp[305],l,w; char dic[M][30],s[305]; void DP() { int i,j,k; dp[0]=1; for(i=1; i<l; i++) { dp[i]=dp[i-1]+1; for(j=0; j<w; j++) { int le=len[j]-1; k=i; if(le>k) { continue; } while(le>=0&&k>=0&&k>=le) { if(dic[j][le]==s[k]) { le--; } k--; } if(le<0) { if(dp[i]>dp[k]+i-k-len[j]) { dp[i]=dp[k]+i-k-len[j]; } } } } } int main() { int i; while(scanf("%d%d",&w,&l)!=EOF) { scanf("%s",s); for(i=0; i<w; i++) { scanf("%s",dic[i]); len[i]=strlen(dic[i]); } DP(); printf("%d\n",dp[l-1]); } return 0; }