zoukankan      html  css  js  c++  java
  • poj 3267

    题意:

    问母串中至少去掉多少个字母才能是刚好由单词表中的一些单词连接而成的。

    分析:dp,f[i]表示母串从第i位起始的后缀所对应的最少去掉字母数。

    f[i]有两种选择f[i + 1] + 1或者f[i + num] + num - strlen(word[j])。其中num是从第i位开始匹配word[j]所需要的母串从i位起始的后缀的前缀的长度。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<stack>
    #include<map>
    #include<vector>
    #include<queue>
    using namespace std;
    #define mp make_pair
    const int INF=1000000000;
    const int N=300+9;
    int W,L;
    char s[N],w[N<<1][30];
    int f[N];
    int main()
    {
        scanf("%d%d",&W,&L);
        scanf("%s",s);
        for(int i=0;i<W;i++)scanf("%s",w[i]);
        for(int i=0;i<L;i++)f[i]=L-i;
        for(int l=L-1;l>=0;l--){
            f[l]=f[l+1]+1;
            for(int i=0;i<W;i++){
                int len=strlen(w[i]);
                if(s[l]!=w[i][0])continue;
                int k=l,t=0;
                while(t<len&&k<L){
                    if(w[i][t]==s[k])t++,k++;
                    else k++;
                }
                if(t==len)f[l]=min(f[l],f[k]+k-l-len);
            }
        }
        printf("%d
    ",f[0]);
        return 0;
    }
  • 相关阅读:
    表单序列化
    创建.ignore文件
    头条数学救火队长马丁的一道中山大学研究生入学考试数学分析题
    实数理论
    方法
    目标
    闭区间有限覆盖定理
    零值定理的确界原理证明方法,来自百度
    各种范例
    零值定理
  • 原文地址:https://www.cnblogs.com/01world/p/5653382.html
Copyright © 2011-2022 走看看