算法想不出来。。看得杨的blog杨大神
代码如下
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#define inf 0x3f3f3f3f
using namespace std;
char s[800];
char str[800][800];
int dp[800];
int len[800];
int main()
{
int n, l;
int i, j;
while(cin >> n >> l){
memset(dp,0,sizeof(dp));
scanf("%s", s);
for(i = 0;i < n;i++){
scanf("%s", str[i]);
len[i] = strlen(str[i]);
}
for(i = l-1;i >= 0;i--){
dp[i] = dp[i+1]+1;
for(j = 0;j < n;j++){
if(str[j][0]==s[i]&&l-i>=len[j]){
int ss = i;
int t = 0;
while(ss < l){
if(str[j][t]==s[ss]){
t++;
}
ss++;
if(t==len[j]){
dp[i] = min(dp[i],dp[ss]+ss-i-len[j]);
break;
}
}
}
}
}
printf("%d\n", dp[0]);
}
return 0;
}