BZOJ 1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典:dp【删字符最少】
题目链接: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【删字符最少】的更多相关文章
- BZOJ 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典
题目 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 401 Solv ...
- BZOJ 1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典(单调DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1633 [题目大意] 给出一个字符串和一个字符串集, 问要删去多少个字符该字符串才可以被 ...
- 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 ...
- 【BZOJ】1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1633 一开始也想到了状态f[i]表示i以后的字符串最少删的数 然后想到的转移是 f[i]=min{f ...
- bzoj1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典
Description 没有几个人知道,奶牛有她们自己的字典,里面的有W (1 ≤ W ≤ 600)个词,每个词的长度不超过25,且由小写字母组成.她们在交流时,由于各种原因,用词总是不那么准确.比如 ...
- 【动态规划】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> # ...
- BZOJ 1631: [Usaco2007 Feb]Cow Party( 最短路 )
这道题和蔡大神出的今年STOI初中组的第二题几乎一模一样... 先跑一遍最短路 , 再把所有边反向 , 再跑一遍 , 所有点两次相加的最大值即为answer --------------------- ...
- BZOJ 1631: [Usaco2007 Feb]Cow Party
题目 1631: [Usaco2007 Feb]Cow Party Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 491 Solved: 362[Sub ...
- BZOJ 1635: [Usaco2007 Jan]Tallest Cow 最高的牛
题目 1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec Memory Limit: 64 MB Description FJ's N ( ...
随机推荐
- echarts判断点击参数类型,series为有效,markPoint 无效
https://www.w3cschool.cn/echarts_tutorial/echarts_tutorial-7o3u28yh.html 可以设置如果点击的是markPoint,直接返回
- iOS -- xxxViewController进行pop时直接crash进main.m,EXC_BAD_ACCESS(code=1,address=0x20)
今天在调试程序时,遇到了奇怪的错误.我从主页跳进(push)一个ViewController时一切正常,但是返回主页(pop)时却crash了,直接跳进了main.m(EXC_BAD_ACCESS(c ...
- Canvas的效果操作及save()和restore()方法应用
平移.缩放.旋转等操作等于是,我在一个正的画布绘制好图,然后再把画布做旋转.平移.缩放等等的效果. 也就是说,我使用的X.Y坐标还是正常的坐标(没旋转.平移.缩放等之前的坐标). save()和res ...
- ssh登录时不校验被登录机器的方法
在linux的用户目录下的.ssh文件下,touch config:注意config的权限控制,-rw-r--r--. 配置内容: cat config: Host * StrictHostKeyCh ...
- ES6新语法学习
参考: 1.http://es6.ruanyifeng.com/#docs/let#let-命令 2.https://reactjs.org/tutorial/tutorial.html 3.http ...
- 智能手机+DIY红外=万能遥控器
目前好像只有:三星S4.,努比亚大牛,华为荣耀3等几款新机才有红外遥控功能,那我们使用的手机没有这个功能怎么办?不要急我有办法呵呵,本次DIY材料好找又简单,大家都可以亲自试一试! DIY材料:红外二 ...
- iOS开发之Xcode8兼容适配iOS 10资料整理笔记
1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserN ...
- 第四讲_图像识别之图像分类Image Classification
第四讲_图像识别之图像分类Image Classification 目录 图片分类 性能指标:top1,top5 ILSVRC:每种任务数据集不一样 imageNet:根据WorldNet组织的图片集 ...
- py3处理数据库
处理mysql使用 pymysql模块 import pymysql conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',passw ...
- 定义自己的代码风格CheckStyle简单使用
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE module PUBLIC "-/ ...