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

      题意  给出一个母串  和一个字典 问母串最少删去几个字母     删去后的母串是由字典里面的单词拼起来的

      思路:dp[i]表示从i到母串结尾最少需要删除多少个字母  初始化dp[length]=0 最坏情况dp[i]=dp[i+1]+1

      状态转移方程 dp[i]=min(dp[i],dp[p]+p-len-i) p 匹配单词的最后一个位置  len是字典里面单词的长度 i是开始匹配的位置   p-len-i的意义就是匹配过程中删除了多少个字母

      参考:http://www.cnblogs.com/lyy289065406/archive/2011/07/31/2122638.html

      

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 char s[305];
     6 char dir[605][305];
     7 int dp[1000];
     8 int main(){
     9     int w,l;
    10     scanf("%d%d",&w,&l);
    11     scanf("%s",s);
    12     for(int i=0;i<w;i++){
    13         scanf("%s",dir[i]);
    14     }
    15     dp[l]=0;
    16     for(int i=l-1;i>=0;i--){
    17         dp[i]=dp[i+1]+1;
    18         for(int j=0;j<w;j++){
    19             int len=strlen(dir[j]);
    20             int pm=0;
    21             if(l-i+1>=len&&s[i]==dir[j][0]){
    22                 int p2=i;
    23                 while(p2<l){
    24                     if(dir[j][pm]==s[p2++]){
    25                     pm++;
    26                   }
    27                         if(pm==len){
    28                     dp[i]=min(dp[i],dp[p2]+p2-i-len);
    29                     break;
    30                 }
    31                 }
    32             }
    33         }
    34     }
    35     cout<<dp[0]<<endl;
    36     return 0;
    37 }
  • 相关阅读:
    杭电2059
    杭电2058
    php错误大集合
    显示IP地址
    超简单好用的屏幕录像工具
    jquery“不再提醒"功能
    KindEditor编辑器中的class自动过滤了
    实用案例:切换面板同时切换内容
    仿51返利用户图解教程
    JavaScript调用dataTable并获取其值(ASP.Net,VS2005)
  • 原文地址:https://www.cnblogs.com/ttttttttrx/p/10260787.html
Copyright © 2011-2022 走看看