poj3267 dp 154ms

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cstring>
#include<algorithm>
using namespace std;
char s[700];
char word[700][30];
int dp[700];
int a,b;
void chuli(int s_p){///对每个串上的字符  对每个单词进行扫描
dp[s_p]=min(dp[s_p],dp[s_p-1]+1);
for(int i=0;i<a;i++){
    if(s[s_p]==word[i][0]){
            int lenth=strlen(word[i]);
             int wp=0;
            for(int j=s_p;j<b;j++){
            if(s[j]==word[i][wp])wp++;
            if(wp==lenth){
            dp[j]=min(dp[j],dp[s_p-1]+j-s_p+1-lenth);
            }
        }
    }
}
}
int main(){
//freopen("input2.txt","r",stdin);
while(scanf("%d%d",&a,&b)!=EOF){
for(int i=-1;i<b;i++){///这里是为了应付 ==0的情况
    dp[i]=i+1;
}
    scanf("%s",s);
    for(int i=0;i<a;i++){
     scanf("%s",word[i]);
    }
    for(int i=0;i<b;i++){
        chuli(i);
    }
    printf("%d\n",dp[b-1]);
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40675883/article/details/82694575
今日推荐