POJ3267
从今天开始POJ里的一部分类型的题目就一般不放在一起写了
一个是太丑,格式麻烦,第二个是以后的题目难度都有所增大,因此一道题可能就要写蛮长
尤其是DP这一块,以前一直没好好学习,现在从基础的先开始吧
题意:给你一个较长的长度为L的串,以及W个长度较短的串。现在问你要从较长串中删去最少几个字符,才能使得这个串由那些长度较短的串组成。
好,题意有点难懂是吧,可以看一下example
删去那两个d使原串变成browncow,既满足要求
首先这个问题肯定满足从局部最优可以推到全局最优
即设f[i]表示先i个字符中最少要删去多少个字符才满足要求
然后发现f[i]可以从它前面转移:
f[i]=min(f[i-1]+1,f[j]+work(s(j,i),t[k]))(1<=i<=l;0<=j<i;1<=k<=w)
其中work表示要对s(j,i)删去几个字符才能使s(j,i)等于t[k]
CODE
#include<iostream>
#include<string>
using namespace std;
const int INF=1e9;
int n,m,cnt,f[305];
string s,t[605];
inline int get(string t,string s)
{
register int i;
int p=0;
for (i=0;i<t.size();++i)
if (s.find(t[i],p)!=string::npos) p=s.find(t[i],p)+1; else return INF;
return s.size()-t.size();
}
inline int work(string s)
{
int tot=INF;
for (register int i=1;i<=n;++i)
tot=min(tot,get(t[i],s));
return tot;
}
inline int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
std::ios::sync_with_stdio(false);
register int i,j;
cin>>n>>m>>s;
for (i=1;i<=n;++i)
cin>>t[i];
for (i=1,f[1]=1;i<=m;++i,f[i]=f[i-1]+1)
for (j=0;j<i;++j)
{
string temp=s.substr(j,i-j);
f[i]=min(f[i],f[j]+work(temp));
}
printf("%d",f[m]);
return 0;
}
但是这样的话时间复杂度爆炸
然后我们很显然地发现,对于一个串,只需要找到在前面第一个包含它的字串然后转移即可,就可以省去枚举j的那一维
CODE
#include<iostream>
#include<string>
using namespace std;
const int INF=1e9;
int n,m,cnt,f[305];
string s,t[605];
inline int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
std::ios::sync_with_stdio(false);
register int i,j;
cin>>n>>m>>s;
for (i=1;i<=n;++i)
cin>>t[i];
for (i=1,f[1]=1;i<=m;++i,f[i]=f[i-1]+1)
{
for (j=1;j<=n;++j)
{
int p1=i-1,p2=t[j].size()-1;
while (p2>=0&&p1>=0)
{
if (s[p1]==t[j][p2]) --p2; --p1;
}
if (p2<0) f[i]=min(f[i],f[p1+1]+i-p1-t[j].size()-1);
}
}
printf("%d",f[m]);
return 0;
}
POJ3267的更多相关文章
- POJ3267——The Cow Lexicon(动态规划)
The Cow Lexicon DescriptionFew know that the cows have their own dictionary with W (1 ≤ W ≤ 600) wor ...
- poj3186 poj3267
两道很不错的dp 3186很神似回文词,合并石子之类的问题: 一开始不知道怎么在dp方程中体现权值天数,很来才想起来 对于一段区间[i,j],里面的东西必然是要卖完的 又因为只能从两头开始卖,所以 d ...
- POJ-3267 The Cow Lexicon---删除字符匹配单词
题目链接: https://cn.vjudge.net/problem/POJ-3267 题目大意: 题意就是给出一个主串,和一本字典,问最少在主串删除多少字母,可以使其匹配到字典的单词序列. PS: ...
- POJ3267 The Cow Lexicon(DP+删词)
The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9041 Accepted: 4293 D ...
- POJ3267 The Cow Lexicon(dp)
题目链接. 分析: dp[i]表示母串从第i位起始的后缀所对应的最少去掉字母数. dp[i] = min(dp[i+res]+res-strlen(pa[j])); 其中res 为从第 i 位开始匹配 ...
- 【个人训练】The Cow Lexicon(POJ-3267)
继续大战dp.2018年11月30日修订,更新一下现在看到这个题目的理解(ps:就现在,poj又503了). 题意分析 这条题目的大意是这样的,问一字符串内最少删去多少的字符使其由给定的若干字符串构成 ...
- poj题目
poj2965 poj1753:标准的BFS+位运算优化 poj1328:线段覆盖变种,把圆对应到线段上,贪心求解 poj2109:高精度开根,二分+高精度,注意要判断答案的位数,如果按照题目给的范围 ...
- poj分类 很好很有层次感。
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- 【转】POJ题目分类推荐 (很好很有层次感)
OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...
随机推荐
- 微信小程序开发--宽为百分百,页面仍可左右滑动
这段时间小程序开发时,很多时候,希望内容充满整个屏幕(高度.宽度100%),如下图 但是在设置 .followrecords-container{width:100%;} 后发现 手机在横向上虽然页面 ...
- Windows10系统的Linux子系统中安装MySQL数据库心得
后端开发童鞋们, 自己开发机用的是Windows系统电脑(台式机或笔记本), 而开发的程序和使用的数据库等要运行在Linux服务器上, 这种情况有木有? 提前声明: 本文并不讨论操作系统的比较, 以及 ...
- webpack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
- C#多线程的用法8-线程间的协作AutoResetEvent
AutoResetEvent自动重置事件,与ManualResetEvent是相对的而言.它同样用于线程间同步,请对照<C#多线程的用法7-线程间的协作ManualResetEvent>进 ...
- CAC的Debian-8-64bit安装BBR正确方式是?
裝过三台debian 64 bit, CAC, 2歐, KVM虛擬機 做法都一樣 0. 有裝銳速記得先刪除, 免得換核心後, 銳速在扯後腿 1.換4.9版kernel 有正式版 別裝啥rc版, 4.9 ...
- css继承属性与非继承属性
一.无继承性的属性 1.display:规定元素应该生成的框的类型 2.文本属性: vertical-align:垂直文本对齐 text-decoration:规定添加到文本的装饰 text-shad ...
- crontab 命令使用
什么是crontab? crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行. ...
- SecureCRT Win免安装版本,简单好用
SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件. 这个简单好用,程序员必备. 下载地址:SecureCRT. ...
- Python接口自动化--post提交的四种数据类型 4
常见的post请求提交的数据类型有四种: 1.第一种:application/json:这是最常见的json格式,如下 {"input1":"XXX",&quo ...
- 2017-2018-2 20165318 实验三《Java面向对象程序设计》实验报告
2017-2018-2 20165318 实验三<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:孙晓暄 ...