题目描述

给出一个长度不超过200的由小写英文字母组成的字母串(该字串以每行 20个字母的方式输入,且保证每行一定为 20个)。要求将此字母串分成 k 份,且每份中包含的单词个数加起来总数最大。

每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串 this 中可包含 this 和 is,选用 this 之后就不能包含 th。 单词在给出的一个不超过 6个单词的字典中。

要求输出最大的个数。

输入格式

每组的第一行有两个正整数 p,k。 p 表示字串的行数,k 表示分为 k个部分。接下来的 p行,每行均有 20个字符。再接下来有一个正整数 s,表示字典中单词个数。 接下来的 s 行,每行均有一个单词。

输出格式

1个整数,分别对应每组测试数据的相应结果。

样例输入

1 3
thisisabookyouareaoh
4
is
a
ok
sab 

样例输出

7

数据范围与提示

对于 100%的数据,2≤k≤40,1≤s≤6。

基本思路与想法:

分析:

我们可以直接去预处理一下单词个数,然后进行dp即可

状态转移的格式:

f[i][k]=max(f[i][k],f[j][k-1]+a[j+1][i]);

【思路】

DP+字符串:

最优划分。设d[i][j]表示把前i个数划分为j段的最大单词数。则有转移方程:

………………(见上,没记住的面壁思过WAW)

同时即你不管单词的划分,只需统计处总的单词个数(根据题目要求用过的单词首字母不能再用),好像是可以骗分的吧……

PS:

每个字母只可能构成一个单词来贡献答案,暴力处理d[i]为从i开始构成单词的最近位置,O(n*n*6) f[i][j]表示前i个字符分成j组 (你记住了么?) k逆序枚举,w可以顺便递推出来

动态规划 :

f[i,k]表示前 i 个字母,分成k部分的最多单词个数

好像暴力深搜也~能↗↘→过~~~的……吧?(减弱)

恰饭:

#include <bits/stdc++.h>//我爱↗你♂
using namespace std;
int p,k1,t,len;
string s,zd[10];
long long f[200+5][45],a[205][205];
int main(){int i,j,k;string s1;memset(f,0,sizeof(f));memset(a,0,sizeof(a));//基本の初始化cin>>p>>k1;s="";  len=20*p;for (i=0;i<p;i++){cin>>s1;s=s+s1;}cin>>t;for (i=0;i<t;i++)cin>>zd[i];for (j=len-1;j>=0;j--){for (i=j;i>=0;i--){s1=s.substr(i,j-i+1);//后面会说到a[i][j]=a[i+1][j];for (k=0;k<t;k++){if (s1.find(zd[k],0)==0){//也会说FINDa[i][j]++;break;}}}}for (i=0;i<len;i++){for (k=1;k<=min(i+1,k1);k++){for (j=k-2;j<i;j++){int j1=max(j,0);f[i][k]=max(f[i][k],f[j1][k-1]+a[j+1][i]);//再次记忆一哈吧}}}cout<<f[len-1][k1]<<endl; return 0;//养成好习惯(虽然我也不怎么写)
}

最后的循环要注意j>=0 ,也不能盲目max(0,k-2);会出错!!!

PS:

find函数

find() 函数本质上是一个模板函数,用于在指定范围内查找和目标元素值相等的第一个元素。

如下为 find() 函数的语法格式:

字符串名 find (字符串名 first,字符串名 last, const T& val);

其中,first 和 last 为输入迭代器,[first, last) 用于指定该函数的查找范围;val 为要查找的目标元素。

正因为 first 和 last 的类型为输入迭代器,因此该函数适用于所有的序列式容器。

另外,该函数会返回一个输入迭代器,当 find() 函数查找成功时,其指向的是在 [first, last) 区域内查找到的第一个目标元素;如果查找失败,则该迭代器的指向和 last 相同。

值得一提的是,find() 函数的底层实现,其实就是用(==)运算符将 val 和 [first, last) 区域内的元素逐个进行比对。这也就意味着,[first, last) 区域内的元素必须支持(==)运算符。

PPS:

substr方法用于字符串的截取

两个参数用法:

字符串.substr(参数1,参数2)

参数1(可以是0、正整数、负数)
参数1解释:

  • 如果是0或正整数,则代表字符串截取的起始下标

  • 如果是负数,则代表从倒数第几个字符开始截取

参数2解释:

  • 字符串截取字符的个数(正整数)

  • 如果是0或负数,则会返回空字符串1个参数用法:

1个参数用法:

字符串.substr(参数);

参数:

  • 如果是0或正整数:字符串截取的起始下标,默认截取至字符串结尾
  • 如果是负数:则从倒数第几个字符开始截取,默认截取至字符串结尾

PPPS:

点个大大的喜欢再走吧

[NOIP2001] 统计单词个数相关推荐

  1. 开发可统计单词个数的Android驱动程序(2)

    开发可统计单词个数的Android驱动程序(1) 五.指定与驱动相关的信息 虽然指定这些信息不是必须的,但一个完整的Linux驱动程序都会指定这些与驱动相关的信息.一般需要为Linux驱动程序指定如下 ...

  2. 统计单词个数(划分型)

    codevs 1040 统计单词个数 2001年NOIP全国联赛提高组  题目等级 : 黄金 Gold 题目描述 Description 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该 ...

  3. codevs1040统计单词个数(区间+划分型dp)

    1040 统计单词个数 2001年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 给出一个长度不超过2 ...

  4. c语言编程统计单词的个数,使用c语言如何统计单词个数

    使用c语言如何统计单词个数 发布时间:2020-04-21 13:58:58 来源:亿速云 阅读:207 作者:小新 使用c语言如何统计单词个数?相信有很多人都不太了解,今天小编为了让大家更加了解Go ...

  5. 【codevs1040】【01NOIPTG】统计单词个数,字符串的划分DP

    1040 统计单词个数 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个长度不超过200的 ...

  6. python输入一个英文句子 输出单词个数_编写程序,给出一个英文句子,统计单词个数。_学小易找答案...

    [简答题]叙述pass语句的作用. [简答题]吹风机不工作,可以用万用表检测吗?在网上搜索关键词,吹风机不工作怎么办? [单选题]以下代码运行结果正确的是哪一项?() x=2 if x:print(T ...

  7. C语言-统计单词个数

    目录 1 算法思想 2 实现1 3 实现2 1 算法思想 读取输入进来的一个字符串,统计其中单词的个数,由于每个单词字母不一样,长度不一样,所以来依靠识别单词来统计单词数是比较难的,下面观察一个字符串 ...

  8. python统计单词个数算法_python 统计单词个数和频次

    开始学习python,习题需要统计单词个数和频次.百度找到的代码好像都有问题.自己写了一个,调试通过. 环境:python: 3.9.1 64bit :  pycharm: 2020.2  电脑 wi ...

  9. hadoop 文本统计一个字符的个数_hadoop统计单词个数 - 卡饭网

    hadoop入门之统计单词在文件中出现的个数示例 hadoop入门之统计单词在文件中出现的个数示例 Linux环境:CentOs6.4 Hadoop版本:hadoop-0.20.2 内容:统计hado ...

最新文章

  1. centos7 mariadb mysql max_connections=214 无法修改的问题
  2. python每一句后面可以加也可以不加分号
  3. Linux的文本字段统计方法
  4. IIS中WEB服务器的日志存放到SQL Server 2005中
  5. 2017年java教材推荐_干货|2017年最新JavaEE课程大纲分享
  6. 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历
  7. 开源程序安装框架-BitNami
  8. php三次握手,深入理解TCP协议及其源代码——三次握手(示例代码)
  9. mac系统我的世界服务器,我的世界Mac版联机教程
  10. 计算机基础知识论文统一格式,大一计算机基础知识论文.docx
  11. MySql作业练习题
  12. Sumatra PDF 缩放设置
  13. C++:求平均分(针对基本数据类型的应用)
  14. 【汽车制造业】“新三化+新能源”蓝海,加速车企数字化转型进入“深水区”
  15. 小米抢发全尺寸人形机器人,全方面转型!
  16. 计算机系统崩溃了怎么办,电脑系统崩溃开不了机怎么办
  17. 夜天之书 #26 Four-Factor OSC
  18. 数据库高可用架构 - pxc
  19. slice splice split
  20. HOOK Windows API

热门文章

  1. 切比雪夫插值介绍与应用
  2. BANCOR学习:如何从BANCOR交易所兑换ENJIN通证?
  3. 2021年全球变容二极管收入大约730.3百万美元,预计2028年达到884.6百万美元
  4. css3 火焰文字,CSS3-CSS3源码之火焰文字特效
  5. 有关资源回收finally
  6. Scrapy基础 第三节:Scrapy框架结构和组件介绍
  7. 【无人机取证篇】无人机数据存储位置
  8. c#之类,抽象类,接口
  9. RCE详解(远程命令/代码执行漏洞)
  10. 昆仑通态通讯ABB ACS510变频器恒压供水(一拖一到四 ABB变频器恒压供水触摸屏通讯程序