zoukankan      html  css  js  c++  java
  • POJ 3267 The Cow Lexicon

    题意:就是给出一个主串,和一本字典,问最少在主串删除多少字母,可以使其匹配到字典的单词序列。

    PS:是匹配单词序列,而不是一个单词。

    f[i]表示从message中第i个字符开始,到第L个字符(结尾处)这段区间所删除的字符数,初始化为f[L]=0

    由于我的程序是从message尾部向头部检索匹配,所以是下面的状态方程:

    1、f[i]=f[i+1]+1   不能匹配时(最坏情况)

    2、f[i]=min(f[i],f[p]+(p-i)-q)   可以匹配时(取最优)


     

    // Time 94ms; Memory 268K
    #include<iostream>
    using namespace std;
    int main()
    {
    	int w,l,i,j,p,q;
    	char m[305],d[605][30];
    	int f[305];
    	cin>>w>>l;
    	cin>>m;
    	for(i=0;i<w;i++)
    		cin>>d[i];
    	f[l]=0;
    	for(i=l-1;i>=0;i--)
    	{
    		f[i]=f[i+1]+1;
    		for(j=0;j<w;j++) if(m[i]==d[j][0])
    		{
    			p=i;q=0;
    			while(p<l)
    			{
    				if(m[p]==d[j][q])
    				{
    					q++;
    					if(d[j][q]==0) break;
    				}
    				p++;
    			}
    			if(p<l && f[i]>f[++p]+p-i-q) f[i]=f[p]+p-i-q;
    		}
    	}
    	cout<<f[0]<<endl;
    	return 0;
    }


  • 相关阅读:
    集合
    字典
    元组
    列表
    数字类型和字符串类型
    Python 数据类型
    jq的一点点
    常用到jq的ajax
    上传
    下载
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218211.html
Copyright © 2011-2022 走看看