poj3267——the cow lexicon

题目大意:奶牛发送的消息可能有干扰字母,问至少删除几个字母能让它成为有意义的消息(在奶牛字典里存在的)

输入:字典包含词的个数W  消息长度L

            发送的消息

            字典里面的单词1

            字典里面的单词2...

输出:删除字母个数

分析:从前往后动态规划

            消息字符串长度m,字典中单词个数n

            状态dp[i]:前i个字母中删除的字符个数

            结果:dp[m]

            初始化:dp[0]=0

            状态转移方程:dp[i]=dp[i-1]+1;(最坏情况)

                                       若匹配成功则取最优值dp[i]=min{dp[i],dp[i-x]+x-lb};

            匹配过程:当单词长度lb小于当前i且单词尾字母和第i位吻合时,才进行匹配。x为消息字符串指针走过的字符个数,当x大于i时,匹配失败跳出循环,dp[i]不变。逐个字符匹配,吻合时x++,y--(y为单词指针,从词尾开始),否则x++,y不动,当y=0(到达单词开头)时,匹配成功,进行dp[i]优化。

代码:以下参考http://www.bubuko.com/infodetail-253439.html

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

int min(int a,int b)
{
    return a<b?a:b;
}
int main()
{
    int n,m;
    int i,j;
    char a[610],b[1005][1005];//a为消息字符串,b为字典中的n个单词
    int dp[610];
    int lb;
    int x,y;
    while(cin>>n>>m)
    {
        cin>>a+1;
        for(i=0;i<n;i++)
            cin>>b[i]+1;
        dp[0]=0;
        for(i=1;i<=m;i++)
        {
            dp[i]=dp[i-1]+1;//如果无法匹配
            for(j=0;j<n;j++)
            {
                lb=strlen(b[j]+1);
                x=0;y=lb;
                if(i>=lb&&a[i]==b[j][lb])
                {
                    while(i-x>0)
                    {
                        if(a[i-x]==b[j][y])
                        {x++;y--;}
                        else x++;
                        if(!y)
                        {
                            dp[i]=min(dp[i],dp[i-x]+x-lb);
                            break;
                        }
                    }
                }

            }
        }
        cout<<dp[m]<<endl;
    }
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值