题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1633

题意:

  给你一个长度为n的主串a,和一个有m个字符串s[i]的单词书(s[i].size <= 25)。

  问你至少删去多少个a中的字符,才能使a成为一个由s[i]组成的排列。

题解:

  从后往前推。

  表示状态:

    dp[i] = min eliminations

    表示第i个及以后的字符合法时,删去字符的最小数量。

  找出答案:

    ans = dp[0]

    整个串合法。

  如何转移:

    对于第i个字符,要么删去(情况1),要么不删(情况2)。

    (1)dp[i] = min dp[i+1] + 1

    (2)dp[i] = min dp[i+t+len] + t

      枚举s[i],长度为len。若i为s[i]的首字母,则至少要删去t个字符。

      s[i]尾字母的下一位 = i+t+len。

      所以dp[i]由dp[i+t+len]转移而来。

      暴力求t就好,单次复杂度O(n)。程序总复杂度为O(n^2 * m)。

  边界条件:

    dp[n] = 0

AC Code:

 // state expression:
// dp[i] = min eliminations
// i: considering ith letter
//
// find the answer:
// ans = dp[0]
//
// transferring:
// dp[i] = min dp[i+t+len] + t
// dp[i] = min dp[i+1] + 1
//
// boundary:
// dp[n] = 0
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 305
#define MAX_M 605 using namespace std; int n,m;
int dp[MAX_N];
string a;
string s[MAX_M]; void read()
{
cin>>m>>n>>a;
for(int i=;i<m;i++)
{
cin>>s[i];
}
} int cal_elim(int x,int y)
{
int cnt=;
int pos=;
for(int i=x;i<n;i++)
{
if(a[i]==s[y][pos]) pos++;
else cnt++;
if(pos==s[y].size()) return cnt;
}
return -;
} void solve()
{
dp[n]=;
for(int i=n-;i>=;i--)
{
dp[i]=dp[i+]+;
for(int j=;j<m;j++)
{
int t=cal_elim(i,j);
if(t!=-) dp[i]=min(dp[i],dp[i+t+s[j].size()]+t);
}
}
} void print()
{
cout<<dp[]<<endl;
} int main()
{
read();
solve();
print();
}

BZOJ 1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典:dp【删字符最少】的更多相关文章

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

    题目 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 401  Solv ...

  2. BZOJ 1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典(单调DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1633 [题目大意] 给出一个字符串和一个字符串集, 问要删去多少个字符该字符串才可以被 ...

  3. bzoj 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典【dp】

    预处理出g[i][j]表示原串第i个匹配第j个单词需要去掉几个字母(匹配不上为-1) 设f[i]为i及之后满足条件要去掉的最少字母 倒着dp! f[i]初始为f[i+1]+1,转移方程为f[i]=mi ...

  4. 【BZOJ】1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1633 一开始也想到了状态f[i]表示i以后的字符串最少删的数 然后想到的转移是 f[i]=min{f ...

  5. bzoj1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典

    Description 没有几个人知道,奶牛有她们自己的字典,里面的有W (1 ≤ W ≤ 600)个词,每个词的长度不超过25,且由小写字母组成.她们在交流时,由于各种原因,用词总是不那么准确.比如 ...

  6. 【动态规划】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> # ...

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

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

  8. BZOJ 1631: [Usaco2007 Feb]Cow Party

    题目 1631: [Usaco2007 Feb]Cow Party Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 491  Solved: 362[Sub ...

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

    题目 1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec  Memory Limit: 64 MB Description FJ's N ( ...

随机推荐

  1. springboot使用Mybatis(xml和注解)全解析

    ​  刚毕业的第一份工作是 java 开发,项目中需要用到 mybatis,特此记录学习过程,这只是一个简单 demo,mybatis 用法很多不可能全部写出来,有更复杂的需求建议查看 mybatis ...

  2. Flex 布局教程学习

    转载自:阮一峰的网络日志(http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html) 网页布局(layout)是 CSS 的一个重点应用. 布局 ...

  3. 用JSONObject解析和处理json数据

    (一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre (二)常见场景及处理方法 1.解析简单的json字符串: 1 // 简单的jso ...

  4. linux 用户管理命令学习

    groupadd www-data 添加组 useradd phpcomposer -g www-data 添加用户并加入组中 passwd phpcomposer 添加密码 usermod -g p ...

  5. DevExpress右键菜单使用 z

    添加BarManager和popupMenu组建: 设置popupMenu组件的Manager属性: 右键点击popupMenu主键,点击Customize选项添加菜单:    然后便可添加到鼠标事件 ...

  6. 在谈MVP之前,你真的懂MVC吗?

    最近看到很多文章在谈论MVP或者MVVM模式的,但其实无论MVP还是MVVM都只是MVC模式的一种变种.而如果你对MVC的设计理念都还没有理解透彻,那么即使换成MVP亦或MVVM也不可能让你杂乱不堪的 ...

  7. android状态栏总结

    针对状态栏的操作,只针对4.4kitKat(含)以上的机型,部分国产rom会失效,目前发现的有华为的EMUI Activity必须是noActionbar主题 本文基于StatusBarUtils略作 ...

  8. HashMap 和 Hashtable 的同和不同

    综述 可以直接根据 hashcode 值判断两个对象是否相等吗?肯定是不可以的,因为不同的对象可能会生成相同的 hashcode 值.虽然不能根据 hashcode 值判断两个对象是否相等,但是可以直 ...

  9. 电话号码 【trie树】

    电话号码 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描写叙述 给你一些电话号码,请推断它们是否是一致的,即是否有某个电话是还有一个电话的前缀. 比方: Emerg ...

  10. 转: WebRTC音视频引擎研究(1)--整体架构分析

    转自: http://blog.csdn.net/temotemo/article/details/7530504   目录(?)[+]   WebRTC技术交流群:234795279 原文地址:ht ...