zoukankan      html  css  js  c++  java
  • BZOJ 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典

    题目

    1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典

    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 401  Solved: 216
    [Submit][Status]

    Description

    没有几个人知道,奶牛有她们自己的字典,里面的有W (1 ≤ W ≤ 600)个词,每个词的长度不超过25,且由小写字母组成.她们在交流时,由于各种原因,用词总是不那么准确.比如,贝茜听到有人对她说"browndcodw",确切的意思是"browncow",多出了两个"d",这两个"d"大概是身边的噪音. 奶牛们发觉辨认那些奇怪的信息很费劲,所以她们就想让你帮忙辨认一条收到的消息,即一个只包含小写字母且长度为L (2 ≤ L ≤ 300)的字符串.有些时候,这个字符串里会有多余的字母,你的任务就是找出最少去掉几个字母就可以使这个字符串变成准确的"牛语"(即奶牛字典中某些词的一个排列).

    Input

    第1行:两个用空格隔开的整数,W和L.

    第2行:一个长度为L的字符串,表示收到的信息. 第3行至第W+2行:奶牛的字典,每行一个词.

    Output

    唯一一行:一个整数,表示最少去掉几个字母就可以使之变成准确的"牛语".

    Sample Input

    6 10
    browndcodw
    cow
    milk
    white
    black
    brown
    farmer

    Sample Output

    2

    题解

    这道题目的DP一开始没想出来,写了一个O(n^3)的但是不太想写了。。。就去赫赫。。。。f[i]表示i个字符以前要删的字符个数,f[i]=min{f[i+1]+1, f[i+len[a]+t]+t} t为i开始后找到单词a要删的字母个数。。然后可以各种优化辣,从后往前推之类的!

    代码

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<string>
     5 using namespace std;
     6 int n,l,len[605],f[605];
     7 char str[605],ch[605][30];
     8 inline int cal(int x,int len,int y){
     9     int tot=0;
    10     int l1=x,l2=1;
    11     while(l1<=l){
    12         if(str[l1]==ch[y][l2])l2++;
    13         else tot++;
    14         if(l2==len+1)return tot;
    15         l1++;
    16     }
    17     return -1;
    18 }
    19 int main(){
    20     scanf("%d%d",&n,&l);
    21     scanf("%s",str+1);
    22     for(int i=1;i<=n;i++)
    23         scanf("%s",ch[i]+1);
    24     for(int i=l;i;i--){
    25         f[i]=f[i+1]+1;
    26         for(int j=1;j<=n;j++){
    27             int Len=strlen(ch[j]+1);
    28             int t=cal(i,Len,j);
    29             if(t!=-1)f[i]=min(f[i],f[i+Len+t]+t);
    30         }
    31     }
    32     printf("%d",f[1]);
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    Mysql:Group Replication & Replication
    使用winsw包装服务将nginx包装为Windows服务
    Nginx的一些常用配置
    在ASP.NET Core 2.0中使用Facebook进行身份验证
    展现层实现增删改查
    ABP创建应用服务
    ABP领域层定义仓储并实现
    ABP领域层创建实体
    通过模板创建一个ABP项目
    Android UI组件:布局管理器
  • 原文地址:https://www.cnblogs.com/WNJXYK/p/4070075.html
Copyright © 2011-2022 走看看