zoukankan      html  css  js  c++  java
  • POJ3267The Cow Lexicon

    http://poj.org/problem?id=3267

    题意 : 给你一个message,是给定字符串,然后再给你字典,让你将message与字典中的单词进行匹配,输出要删掉多少字母。

    思路 : 动态规划问题,不仅要找对公式,还要注意一些细节问题

    样例解释 : 6是字典里有6个单词,10是给定的字符串的长度,给定的字符串可以与下面的brown和cow匹配,但要删掉两个字母

    6 10
    browndcodw
    cow
    milk
    white
    black
    brown
    farmer
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<iostream>
    using namespace std ;
    int main()
    {
        int W,L,len ;
        string mess,dic[40000];
        cin>>W>>L ;
        int dp[10000] ;
        cin>>mess ;
        for(int i = 0 ; i < W ; i++)
            cin>>dic[i] ;
        dp[L] = 0 ;//dp[i]代表着从i到L所要删除的字符个数
        for(int i = L-1 ; i >= 0 ; i--)//从message中倒着找
        {
            dp[i] = dp[i+1]+1 ;//先将最坏的可能存入数组
            for(int j = 0 ; j < W ; j++)
            {
                len = dic[j].length() ;
                if(len <= L-i && dic[j][0] == mess[i])//字典里的某个单词的长度要小于你进行匹配的一部分message的长度
                {
                    int me = i,di = 0 ;
                    while(me < L)
                    {
                        if(dic[j][di] == mess[me++])
                        {
                            di++ ;
                        }
                        if(di == len)
                        {
                            dp[i] = min(dp[i],dp[me]+me-i-len) ;//dp[me]代表着从me到L要删除的字符的个数,me-i代表匹配过程中,从位置i到me的区间长度,再减去单词长度,即可得则得到从i到me所删除的字符数
                            break ;
                        }
                    }
                }
            }
        }
        cout<<dp[0]<<endl ;
        return 0 ;
    }
    View Code
  • 相关阅读:
    命令
    碎片知识
    驱动问题
    网络基础知识普及
    面向设计大作业——公司餐厅
    面向对象--购物车
    OO之接口-DAO模式代码阅读及应用
    有理数类的定义
    图知识点总结
    Java课程设计总结
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3365719.html
Copyright © 2011-2022 走看看