继续大战dp。2018年11月30日修订,更新一下现在看到这个题目的理解(ps:就现在,poj又503了)。

题意分析

这条题目的大意是这样的,问一字符串内最少删去多少的字符使其由给定的若干字符串构成。非常好的一道字符串dp题。
具体的dp解法是什么呢?考虑一下我们删去的这个过程。比如说这个式子

throw
thraow

我们要不然删去a,要不然删去 “thraow”才能满足由第一个式子构成的这个条件(空串也算被第一个式子构造了)。但是,程序如何知道删去a是使这俩个单词匹配的最优决策?

我们这样考虑:每次从后往前考虑到第i个字符的时候,我有两个决策:一,这个字符不行,删掉(这是个始终合理的答案)。二,这个字符很行,从它($str_i$)到某个字符($str_j$)结束,是能够在删除若干字符的情况下匹配到某个目标串的(也就是说,某个目标串是$(i,j)$的子序列),那么从这个串到末尾的不能匹配的情况就变成(或者说“转移”)从那个目标串结束之后的字符开始的情况了(当然需要更新一下我删去的字符的数目)。

因此,有了上面这些思维过程,就可以想到设立$dp[i]$保存每次删去的最小值,并且从右往左去处理。这样,$dp[i]$的意思就是“从i->end删除最少的值”。
而转移方程自然很容易得出了:$$dp[i]={dp[i+1]+1,dp[cur]+L-cur-i}$$,第二个仅当目标字符串能够在[i,cur]中间删去若干字符后完成匹配可用。

代码

#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
#include <set>
#include <map>
#include <vector>
using namespace std; typedef unsigned long long ull;
int dp[305];
int main()
{
int w,l;
while(cin>>w>>l)
{
string wstr; cin>>wstr;
vector<string> lstr;
for(int i=1;i<=w;++i)
{
string tmp; cin>>tmp;
lstr.push_back(tmp);
}
dp[l]=0;
for(int i=l-1;i>=0;--i)
{
dp[i]=dp[i+1]+1;
//printf("dp[%d]=%d.\n",i,dp[i+1]+1);
for(int j=0;j!=w;++j)
{
int len=lstr[j].length();
if(len<=l-i && lstr[j][0]==wstr[i])
{
int curw=i,curl=0;
while(curw<l)
{
if(lstr[j][curl]==wstr[curw++])
curl++;
if(curl==len)
{
dp[i]=min(dp[i],dp[curw]+curw-i-len);
//printf("[Changed]dp[%d]=%d.\n",i,dp[i]);
break;
}
}
}
}
}
cout<<dp[0]<<endl;
}
return 0;
}

【个人训练】The Cow Lexicon(POJ-3267)的更多相关文章

  1. The Cow Lexicon POJ - 3267 dp

    题意  给出一个母串  和一个字典 问母串最少删去几个字母     删去后的母串是由字典里面的单词拼起来的 思路:dp[i]表示从i到母串结尾最少需要删除多少个字母  初始化dp[length]=0 ...

  2. POJ 3267:The Cow Lexicon(DP)

    http://poj.org/problem?id=3267 The Cow Lexicon Time Limit: 2000MS   Memory Limit: 65536K Total Submi ...

  3. POJ 3267 The Cow Lexicon

    又见面了,还是原来的配方,还是熟悉的DP....直接秒了... The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submis ...

  4. poj 3267 The Cow Lexicon (动态规划)

    The Cow Lexicon Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8167   Accepted: 3845 D ...

  5. POJ 3267:The Cow Lexicon 字符串匹配dp

    The Cow Lexicon Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8905   Accepted: 4228 D ...

  6. POJ 3267-The Cow Lexicon(DP)

    The Cow Lexicon Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8252   Accepted: 3888 D ...

  7. POJ3267 The Cow Lexicon(DP+删词)

    The Cow Lexicon Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9041   Accepted: 4293 D ...

  8. The Cow Lexicon

    The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8815 Accepted: 4162 Descr ...

  9. HDOJ-三部曲-1015-The Cow Lexicon

    The Cow Lexicon Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) To ...

  10. POJ3267——The Cow Lexicon(动态规划)

    The Cow Lexicon DescriptionFew know that the cows have their own dictionary with W (1 ≤ W ≤ 600) wor ...

随机推荐

  1. luogu P3796【模板】AC自动机(加强版)

    嘟嘟嘟 这个和某谷的AC自动机模板简单版差不多. 但还是要注意几点的: 1.这个是统计出现次数,而不是是否出现,所以在查询的时候加上这个节点的val后,不能把val标记为-1.那么也就可以说查询的时间 ...

  2. 【转】彻底理解安卓里的ldpi、mdpi、hdpi、xhdpi、xxhdpi文件夹含义

    这个问题我相信困惑了好多人包括很多老鸟,而且有的人以为自己理解其实是错误的,包括之前的我在内,在做安卓适配的时候,一般让美工做720*1280的切图,就直接放到xhdpi下,如果是做了1080*192 ...

  3. 2018.12.30 Intellij IDEA设置main方法自动补全

    Eclipse与 Intellij IDEA设置方法自动补全 1.首先,点击File-->Settings-->Editor-->Live Templates 设置你想输出的模板 右 ...

  4. About me and this site(2018/8/28)

    Name: 李秋豪 / [lǐ qiū háo] I'm a junior majoring in InfoSec at Harbin Institute of Technology. I'm int ...

  5. 【题解】洛谷P1445 [Violet]樱花 (推导+约数和)

    洛谷P1445:https://www.luogu.org/problemnew/show/P1445 推导过程 1/x+1/y=1/n! 设y=n!+k(k∈N∗) 1/x​+1/(n!+k)​=1 ...

  6. SQL3120W 不能将xx的字段值转换成 INTEGER值

    一次用DB2 Load/Import导入数据时,报错,提示SQL3120W 不能将xx的字段值转换成 INTEGER值,但目标列不可为空.未装入该行. 目标表: CREATE TABLE TEST( ...

  7. 解读JavaScript中的Hoisting机制(js变量声明提升机制)

    hoisting机制:javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 知识点一:javascript是没有 ...

  8. 搜索框反射型xss问题解决(网站开发)

    什么是反射型XSS      XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的h ...

  9. SpringMVC中session使用&&拦截器&&乱码处理&&异常处理

    ### 1. 使用Session 通常,会在Session中存放: 1. 客户端(用户)的身份标识,通常是用户的id:2. 使用频率非常高的数据,例如显示在页面中的用户名.头像等:3. 其它的不便于使 ...

  10. CDN初识

    CDN 全称:Content Delivery Network或Content Ddistribute Network,即内容分发网络,通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层 ...