NC16696 [NOIP2001]统计单词个数
题目
题目描述
给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份( 1 < k ≤ 40 ),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串this中可包含this和is,选用this之后就不能包含th)。
单词在给出的一个不超过6个单词的字典中。
要求输出最大的个数。
输入描述
每组的第一行有2个正整数(p,k)
p表示字串的行数,k表示分为k个部分。
接下来的p行,每行均有20个字符。
再接下来有1个正整数s,表示字典中单词个数。(1 ≤ s ≤ 6 )
接下来的s行,每行均有1个单词。
输出描述
1个整数,分别对应每组测试数据的相应结果。
示例1
输入
1 3
thisisabookyouareaoh
4
is
a
ok
sab
输出
7
题解
知识点:枚举,线性dp,字符串。
这道题是 \(k\) 串最大和的变形,加和部分变为了字符串最多匹配的数量。
因此先预处理出 \(sum[i][j]\) 表示为区间 \([i,j]\) 的最大匹配数。实现上需要逆推,因为要求是第一个字符不一样的匹配才算,所以逆推一个字符后看从这个字符出发有没有匹配的,有就加一。
设 \(dp[i][j]\) 为考虑到 \(i\) 个字符,共有 \(j\) 串。转移方程为:
\]
表示不选从 \(s[i]\) 出发的串,选 \(s[u+1,i]\) 作为第 \(j\) 串。
由于不能选空串,因此初始化负无穷,并把初态 \(j = 0\) 赋值 \(0\) 。
时间复杂度 \(O(k|s|^2)\)
空间复杂度 \(O(|s|^2 + k|s| + m)\)
代码
#include <bits/stdc++.h>
using namespace std;
int sum[207][207], dp[207][47];
string dir[10];
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int p, k;
cin >> p >> k;
string str;
while (p--) {
string tmp;
cin >> tmp;
str += tmp;
}
int n = str.length();
str = '?' + str;
int s;
cin >> s;
for (int i = 1;i <= s;i++) cin >> dir[i];
for (int j = n;j >= 1;j--) {
for (int i = j;i >= 1;i--) {
sum[i][j] = sum[i + 1][j];
bool ok = false;
string tmp = str.substr(i, j - i + 1);
for (int k = 1;k <= s;k++)
ok |= tmp.find(dir[k]) == 0;
sum[i][j] += ok;
}
}
memset(dp, -0x3f, sizeof(dp));
for (int i = 0;i <= n;i++) dp[i][0] = 0;
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= k;j++) {
dp[i][j] = dp[i - 1][j];
for (int u = 0;u < i;u++)
dp[i][j] = max(dp[i][j], dp[u][j - 1] + sum[u + 1][i]);
}
}
cout << dp[n][k] << '\n';
return 0;
}
NC16696 [NOIP2001]统计单词个数的更多相关文章
- NOIP2001 统计单词个数
题三 统计单词个数(30分) 问题描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k&l ...
- NOIP2001统计单词个数[序列DP]
题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单 ...
- Codevs_1040_[NOIP2001]_统计单词个数_(划分型动态规划)
描述 http://codevs.cn/problem/1040/ 与Codevs_1017_乘积最大很像,都是划分型dp. 给出一个字符串和几个单词,要求将字符串划分成k段,在每一段中求共有多少单词 ...
- 第六章 第一个Linux驱动程序:统计单词个数
现在进入了实战阶段,使用统计单词个数的实例让我们了解开发和测试Linux驱动程序的完整过程.第一个Linux驱动程序是统计单词个数. 这个Linux驱动程序没有访问硬件,而是利用设备文件作为介质与应用 ...
- 第六章第一个linux个程序:统计单词个数
第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数. 第 1 步:建立 Linu x 驱 ...
- NOIP200107统计单词个数
NOIP200107统计单词个数 难度级别: A: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给出一个长度不超过200的由 ...
- luogu P1026 统计单词个数
题目链接 luogu P1026 统计单词个数 题解 贪心的预处理母本串从i到j的最大单词数 然后dp[i][j] 表示从前i个切了k次最优解 转移显然 代码 #include<cstdio&g ...
- Codevs 1040 统计单词个数
1040 统计单词个数 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个长度不超过200的 ...
- codevs1040统计单词个数(区间+划分型dp)
1040 统计单词个数 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个长度不超 ...
- P1026 统计单词个数——substr
P1026 统计单词个数 string 基本操作: substr(x,y) x是起始位置,y是长度: 返回的是这一段字符串: 先预处理sum[i][j],表示以i开头,最多的单词数: 从后往前寻找,保 ...
随机推荐
- /etc/profile,/etc/bashrc,~/.profile,~/.bashrc 的区别及使用
转载请注明出处: /etc/profile 为系统的全局环境变量设置,此文件为系统的每个用户设置环境信息 /etc/bashrc 为每一个运行bash shell的用户执行此文件.当bash ...
- Nginx的日志处理
Nginx的日志处理 背景 之前一直被各种咨询nginx的使用问题. 大部分都是性能, 加模块, 以及一些tcp端口等的问题. 其实这些都还好, 还有一个比较麻烦的问题时日志相关的. nginx的日志 ...
- 快速定位Java应用卡顿的原因
快速定位Java应用卡顿的原因 背景 同事的环境说出现了一周的卡顿现象. 元旦加班期间告诉我时已经是2024.1.1下午五点了. 当时没有来得及去查看. 上班之后发现问题很简单. 不过为了能够指导一下 ...
- [转帖]rsync原理
简介: Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的"Rsync算法"来使本地和远 ...
- [转帖]“炫技” 还是 “真硬核”,OpenPPL 实测阿里「倚天 710」芯片
https://my.oschina.net/openppl/blog/5524424 本文将以深度学习模型推理应用为出发点,对「倚天 710」这款 ARM Server 芯片进行性能方面的实测. ...
- [转帖]PyCharm无法安装第三方模块,一直提示 updating list:time out 解决办法
Pycharm无法安装第三方模块解决办法: 1.打开pycharm的项目的venv文件夹 2.打开文件夹目录中的pyvenv文件 3.将文件中的include-system-site-packages ...
- 国产飞腾2000+服务器 存储单盘性能简单验证 SSD 与 HDD
有kylinV10的源 可以直接安装fio yum install fio -y 第一步, 将sdd 进行初始化,并且设置文件系统 fdisk /dev/sdbmkdir /ssd2 mkfs.ext ...
- 【贪心】AGC018C Coins
Problem Link 现在有 \(X+Y+Z\) 个人,第 \(i\) 个人有三个权值 \(a_i,b_i,c_i\),现在要求依次选出 \(X\) 个人,\(Y\) 个人和 \(Z\) 个人(一 ...
- error: Your local changes to the following files would be overwritten by merge
拉取代码出现 error: Your local changes to the following files would be overwritten by merge 解决方案 你团队其他成员修改 ...
- 【解决了一个小问题】macbook m1上的docker build问题
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 1. docker hub限制的问题 因为docker b ...