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 }

时间: 2024-10-07 23:08:50

BZOJ 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典的相关文章

【动态规划】bzoj1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典

f[i]=min{f[i+1]+1,f[i+len[j]+cant]+cant}(for i=L-1 downto 0)(1<=j<=w) #include<cstdio> #include<iostream> #include<string> using namespace std; int n,m; string s,words[601]; int f[302]; int main() { scanf("%d%d",&n,&a

[BZOJ] 1631: [Usaco2007 Feb]Cow Party

1631: [Usaco2007 Feb]Cow Party Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 866  Solved: 624[Submit][Status][Discuss] Description 农场有N(1≤N≤1000)个牛棚,每个牛棚都有1只奶牛要参加在X牛棚举行的奶牛派对.共有M(1≤M≤100000)条单向路连接着牛棚,第i条踣需要Ti的时间来通过.牛们都很懒,所以不管是前去X牛棚参加派对还是返回住所,她们都采用了用时最

BZOJ 1631: [Usaco2007 Feb]Cow Party( 最短路 )

这道题和蔡大神出的今年STOI初中组的第二题几乎一模一样... 先跑一遍最短路 , 再把所有边反向 , 再跑一遍 , 所有点两次相加的最大值即为answer ----------------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #in

BZOJ 1635: [Usaco2007 Jan]Tallest Cow 最高的牛

题目 1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec  Memory Limit: 64 MB Description FJ's N (1 <= N <= 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive integer height (which is a bit of secret). You are t

Bzoj 1696: [Usaco2007 Feb]Building A New Barn新牛舍 中位数,数学

1696: [Usaco2007 Feb]Building A New Barn新牛舍 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 394  Solved: 181[Submit][Status][Discuss] Description 经过多年的积蓄,农夫JOHN决定造一个新的牛舍.他知道所有N(2 <= N <= 10,000)头牛的吃草位置,所以他想把牛舍造在最方便的地方. 每一头牛吃草的位置是一个整数点(X_i, Y_i) (-10,0

bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序

Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序.每一头牛的脾气都是一个在1到100,000之间的整数并且没有两头牛的脾气值相同.在排序过程中,JOHN 可以交换任意两头牛的位置.因为脾气大的牛不好移动,JOHN需要X+Y秒来交换脾气值为X和Y的两头牛. 请帮JOHN计算把所有牛排好序的最短时间. Input 第1行: 一个数, N. 第2~N+1行: 每行一个数,第i+1行是第

bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序【置换群】

至今都不知道置换群是个什么东西--题解说什么就是什么.jpg 以下来自hzwer:http://hzwer.com/3905.html #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=10005; int n,w[N],a[N],v[N]; struct qwe { int x,id; }b[N]; bool cmp(const qwe &a

【差分】BZOJ 1635 [Usaco2007 Jan]Tallest Cow 最高的牛

n头牛,给出最高的牛的高度. 给定r个区间,区间左端点a右端点b,区间内所有数必须小于a,b.且x[b]>=x[a] 区间的差分约束,对于x[a+1]-- x[b]++ 之后求一个前缀和就可以了.这样a~b区间数必小于a,b .且尽量让x[b]==x[a]. 坑点: 1.请勿忘记左右端点的顺序 2.请勿忘记区间判重(当(a,b)区间出现两次 且进行差分的话 会出错的) #include <cstdio> #include <algorithm> #include <cs

bzoj:1632: [Usaco2007 Feb]Lilypad Pond

Description Farmer John 建造了一个美丽的池塘,用于让他的牛们审美和锻炼.这个长方形的池子被分割成了 M 行和 N 列( 1 ≤ M ≤ 30 ; 1 ≤ N ≤ 30 ) 正方形格子的 .某些格子上有惊人的坚固的莲花,还有一些岩石,其余的只是美丽,纯净,湛蓝的水. 贝茜正在练习芭蕾舞,她从一个莲花跳跃到另一个莲花,当前位于一个莲花.她希望在莲花上一个一个的跳,目标是另一个给定莲花.她能跳既不入水,也不到一个岩石上. 令门外汉惊讶的是,贝茜的每次的跳跃像中国象棋的马一样:横