P1026 统计单词个数——substr
string 基本操作:
substr(x,y) x是起始位置,y是长度;
返回的是这一段字符串;
先预处理sum[i][j],表示以i开头,最多的单词数;
从后往前寻找,保证开头没有被用过;
sum[i][j]=sum[i+1][j];
再找是否有新单词出现;
s.find()==0说明找到单词以开头开始;
然后dp,f[i][j]表示以i结尾分j段的最大单词数;
#include<cstdio>
#include<string>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std; string s,ch,a[];
int sum_dic,p,k; int sum[][]; bool check(int l,int r)
{
string x;
x=s.substr(l,r-l+);
for(int i=;i<=sum_dic;i++)
{
if(x.find(a[i])==) return ;
}
return ;
} int f[][]; int main()
{
scanf("%d%d",&p,&k);
s+="";
for(int i=;i<=p;i++)
{
cin>>ch;
s+=ch;
}
int len=s.length()-;
scanf("%d",&sum_dic);
for(int i=;i<=sum_dic;i++)
{
cin>>a[i];
} for(int i=len;i>=;i--)
{
for(int j=i;j>=;j--)
{
sum[j][i]=sum[j+][i];
if(check(j,i)) sum[j][i]++;
}
} f[][]=;
for(int i=;i<=k;i++) f[i][i]=f[i-][i-]+sum[i][i]; for(int i=;i<=len;i++) f[i][]=sum[][i]; for(int i=;i<=len;i++)
{
for(int j=;j<=k&&j<i;j++)
{
for(int l=j;l<i;l++)
{
f[i][j]=max(f[i][j],f[l][j-]+sum[l+][i]);
}
}
} printf("%d",f[len][k]); return ;
}
P1026 统计单词个数——substr的更多相关文章
- luogu P1026 统计单词个数
题目链接 luogu P1026 统计单词个数 题解 贪心的预处理母本串从i到j的最大单词数 然后dp[i][j] 表示从前i个切了k次最优解 转移显然 代码 #include<cstdio&g ...
- [luogu]P1026 统计单词个数[DP][字符串]
[luogu]P1026 统计单词个数 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1&l ...
- P1026 统计单词个数 区间dp
题目描述 给出一个长度不超过200200的由小写英文字母组成的字母串(约定;该字串以每行2020个字母的方式输入,且保证每行一定为2020个).要求将此字母串分成kk份(1<k \le 401& ...
- P1026 统计单词个数 (动态规划)
题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单 ...
- 洛谷 P1026 统计单词个数 Label:dp
题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单 ...
- 洛谷 P1026 统计单词个数
题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单 ...
- [NOIP2001] 提高组 洛谷P1026 统计单词个数
题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保 证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的 ...
- 【dp】P1026 统计单词个数
题目描述 给出一个长度不超过200200的由小写英文字母组成的字母串(约定;该字串以每行2020个字母的方式输入,且保证每行一定为2020个).要求将此字母串分成kk份(1<k \le 401& ...
- 洛谷P1026 统计单词个数【区间dp】
题目:https://www.luogu.org/problemnew/show/P1026 题意: 给定一个字符串,要求把他分成k段.给定s个单词,问划分成k段之后每段中包含的单词和最大是多少. 一 ...
随机推荐
- shiro登录验证简单理解
这两天接手了下师兄的项目,要给系统加个日志管理模块,其中需要记录登录功能的日志,那么首先要知道系统的登录是在哪里实现验证的. 该系统把所有登录验证还有权限控制的工作都交给了shiro. 这篇文章就先简 ...
- 【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表
原文:[SQL Server高可用性]数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表 经常在论坛中看到有人问数据同步的技术,如果只是同步少量的表,那么可以考虑使 ...
- C# 弹出层移动
groupPrint.MouseDown += GroupBox1_MouseDown; #region 弹出层移动 [System.Runtime.InteropServices.Dl ...
- Oracle触发器编译错误及解决方案
错误 TRIGGER **** 编译错误 错误:PLS-00103: 出现符号 "END"在需要下列之一时: ( begin case declare exit ...
- vue-ueditor-wrap报错,vue ueditor 加载ueditor.config.js失败,请检查您的配置地址UEDITOR_HOME_URL填写是否正确!
1.第一次报错后,仔细看了官方文档,少了第一步,下载UEditor源码,放到public目录(前提你用的是vue-cli 3.x的版本). 好那就下载,下载的是vue-ueditor-wrap作者修复 ...
- volatile和锁
让编译器不要将变量缓存到寄存器,而是每次去访问主板上的内存 可见性 对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入 原子性 对任意单个volatile变量的 ...
- 关于get 和post 方法的比较
地址:https://my.oschina.net/leejun2005/blog/136820 点击这里
- C++——多维数组动态开辟与释放
前言 在讨论多维数组动态开辟与释放之前,先说说什么是二维数组静态开辟与释放. 形如这种就是静态开辟内存,事先画好了内存大小 #include<iostream> using namespa ...
- UltraISO 软碟通注册(亲测!!!)
声明:本文仅限学习者共享使用,请勿用来商业行为,否则后果自负!!! 强烈建议!!!支持正版购买通道,请走这里. 免费下载UltralSO软碟通 首先当然是下载安装UltraISO软件,不然怎么** ...
- pyspider 安装
1. sudo apt --update 2.sudo apt --upgrade 3. sudo apt-get install ......大一推依赖包.看pyspider 官网 4.创建虚拟环 ...