这是个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;
}