codevs 1779 单词的划分
1779 单词的划分
时间限制: 1 s
Problem有一个很长的由小写字母组成字符串。为了便于对这个字符串进行分析,需要将它划分成若干个部分,每个部分称为一个单词。出于减少分析量的目的,我们希望划分出的单词数越少越好。Output一个整数,表示字符串可以被划分成的最少的单词数。
- 应该加上一个前提题目中提供的字符串肯定能被划分,否则输出增加判断语句。
从文本文件word.in中读入数据。第一行,一个字符串。(字符串的长度不超过100),第二行一个整数n,表示单词的个数。(n<=100),第3~n+2行,每行列出一个单词。
一个整数,表示字符串可以被划分成的最少的单词数。
realityour
5
real
reality
it
your
our
2
(原字符串可拆成real+it+your或reality+our,由于reality+our仅为两个部分,因此最优解为2,另外注意,单词列表中的每个单词都可以重复使用多次,也可以不用)
/*基本思路:p[i][j]数组储存着从i--j这个区间内,能不能划分为一个单词,是1,否则一个大数
DP方程:f[i]=min(f[i],f[t]+p[t+1][i]);f[i]储存着到1---i为止可以 划分的单词的最小数目,
t从0到i--1枚举,f[t]前t位,p数组表示吧t+1--i当做一个单词 注意:substr函数的使用a.substr(i,l),表示把a字符串从第i位开始,切割l位形成的一个字符串
*/
#include<iostream>
using namespace std;
#include<cstdio>
#include<string>
#include<cstring>
#define N 101
int p[N][N],f[N],lena;
string a,b[N];
int n;
void input()
{
cin>>a;
scanf("%d",&n);
for(int i=;i<=n;++i)
cin>>b[i];
}
void ZB()
{
/* memset(p,99,sizeof(p));这一句赋值超大数是不对的,DP方程中会使int类型越界,所以题目中赋值最大根据题意,不要出现越界的情况,这个题p[][]=1000就足够大了*/
lena=a.length();
for(int i=;i<lena;++i)
for(int j=i;j<lena;++j)
{
int l=j-i+;
for(int k=;k<=n;++k)
if(a.substr(i,l)==b[k])
{
p[i][j]=;
break;
}
else {
p[i][j]=;
}
}
}
void DP()
{
for(int i=;i<lena;++i)
f[i]=p[][i];
for(int i=;i<lena;++i)
for(int t=;t<=i-;++t)
f[i]=min(f[i],f[t]+p[t+][i]);
}
int main()
{
input();
ZB();
DP();
cout<<f[lena-];
return ;
}
codevs 1779 单词的划分的更多相关文章
- codevs 1729 单词查找树
二次联通门 : codevs 1729 单词查找树 /* codevs 1729 单词查找树 Trie树 统计节点个数 建一棵Trie树 插入单词时每新开一个节点就计数器加1 */ #include ...
- tyvj1102 单词的划分
描述 有一个很长的由小写字母组成字符串.为了便于对这个字符串进行分析,需要将它划分成若干个部分,每个部分称为一个单词.出于减少分析量的目的,我们希望划分出的单词数越少越好.你就是来完成这一划分工作的. ...
- Codevs 1205 单词翻转
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 给出一个英语句子,希望你把句子里的单词顺序都翻转过来 输入 ...
- codevs 3013 单词背诵 hash
题目链接 题目描述 Description 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一 ...
- CODEVS 1205 单词反转
嗯.... 这道题看起来挺像一个字符串的题,但其实却错了,它实质上却用了一个栈进行了一个模拟(当然还有一种鬼畜的做法,下面也会介绍到..... 首先先看题: 时间限制: 1 s 空间限制: 12800 ...
- Codevs 1018 单词接龙
1018 单词接龙 2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描 ...
- codevs——1039 数的划分
1039 数的划分 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 将整数 ...
- luoguP1025+codevs 1039 数的划分 x
luoguP1025 + codevs1039 数的划分 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Des ...
- Codevs 1205 单词反转(Vector以及如何输出string)
题意:倒序输出句子中的单词 代码: #include<cstdio> #include<iostream> #include<string> #include< ...
随机推荐
- Msfvenom学习总结-MSF反弹webshell
1. –p (- -payload-options) 添加载荷payload. 载荷这个东西比较多,这个软件就是根据对应的载荷payload生成对应平台下的后门,所以只有选对payload,再填 ...
- System and method to prioritize large memory page allocation in virtualized systems
The prioritization of large memory page mapping is a function of the access bits in the L1 page tabl ...
- c语言简单实现telnet客户端
c语言简单实现telnet客户端 http://blog.csdn.net/haiwenchen/article/details/69944118
- sicily 数据结构 1014. Translation
Description You have just moved from Waterloo to a big city. The people here speak an incomprehensib ...
- mysql utf8改utf8mb4
由于需要用到utf8mb4,之前是utf8现在给改成utf8mb4 查看当前环境 SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' ...
- php设计模式五----适配器模式
1.简介 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 意图:将一个类的接口转换成客户希望的另外一个接口 ...
- 切面保存web访问记录
package com.hn.xf.device.api.rest.aspect; import com.hn.xf.device.api.rest.authorization.manager.Tok ...
- XAlign—自动对齐代码插件
XAlign An amazing Xcode plugin to align regular code. It can align anything by using custom alignmen ...
- [vim]使用中问题
bug1: vim文档中文注释为乱码 step1: vim /var/lib/locales/supported.d/local 在其中添加下面的中文字符集 zh_CN.GBK GBK zh_CN.G ...
- javascript高程笔记:逻辑与和逻辑或
逻辑与和或 逻辑与 当 && 前后两个操作数都是布尔值,无可厚非,同时为true才为true.与其他强类型语言不同的是,javascript逻辑与前后的操作数可以应用于任何类型. 而且 ...