语言无法描述,直接上代码!
#include<iostream>
using namespace std;
const int N=1000009;
typedef long long ll;
ll n,ls,s,c[N],lw,w[N][N],x[N],f[N];
int search(int i,int k){
if(i<lw)return -1;
if(c[i-1]!=w[k][lw-1])return -1;
int pa=i-1;
for(int pb=lw-1;pb>=0;pb--,pa--){
while(pa>=0&&c[pa]!=w[k][pb])pa--;
if(pa<0)return -1;
}
return pa+1;
}
int main(){
freopen("typist2.in","r",stdin);
freopen("typist2.out","w",stdout);
cin>>n>>ls;
cin>>s;
for(int i=1;i<=n;i++)cin>>x[i];
for(int i=1;i<=ls;i++){
f[i]=f[i-1]+1;
for(int k=1;k<=n;k++){
lw=x[k].size();
int p=search(i,k);
if(p<0)continue;
f[i]=min(f[i],f[p]+i-p-lw);
}
cout<<f[ls]<<endl;
}
return 0;
}