luogu 1026 统计单词个数
此题 字符串匹配+dp
确实我的kmp,哈希需要练一练了,忘干净可咋办
补救用下string,十分方便
e.g:
1.询问a[i]是否是x子串,可以截取并判断前缀
x为截取串 x.find(a[i])==0判断前缀即可
2.s+='0',其后利用+=便可挪移下标
dp方程 f[i][j]表示串到i位分了j个块的最大单词数
需要枚举l更新答案,并非直接用i更新
dp[i][j]=max(dp[i][j],dp[l][j-1]+sum[l+1][j])
sum[i][j]代表串由i位到j位的子串匹配的单词数,需要预处理
#include<bits/stdc++.h> using namespace std; int p,k,n,m;
string s,ch,a[];
int f[][],sum[][]; //查询以i为起点,j为重点的串是否包含a[i],判断前缀
bool check(int i,int j){
string x=s.substr(i,j-i+);
for(int i=;i<=n;i++)
if(x.find(a[i])==) return ;
return ;
} void init(){
s+='';//补0挪移下标
cin>>p>>k;
for(int i=;i<=p;i++) cin>>ch,s+=ch;
m=s.length()-;
cin>>n;
for(int i=;i<=n;i++) cin>>a[i]; //sum[i][j] 代表 由i到j 匹配的单词数
for(int i=m;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<=m;i++) f[i][]=sum[][i];
} int main(){
ios::sync_with_stdio(false); init(); for(int i=;i<=m;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]); cout<<f[m][k]<<"\n"; return ;
}
luogu 1026 统计单词个数的更多相关文章
- 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 ...
- 第六章 第一个Linux驱动程序:统计单词个数
现在进入了实战阶段,使用统计单词个数的实例让我们了解开发和测试Linux驱动程序的完整过程.第一个Linux驱动程序是统计单词个数. 这个Linux驱动程序没有访问硬件,而是利用设备文件作为介质与应用 ...
- 第六章第一个linux个程序:统计单词个数
第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数. 第 1 步:建立 Linu x 驱 ...
- NOIP200107统计单词个数
NOIP200107统计单词个数 难度级别: A: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给出一个长度不超过200的由 ...
- NOIP2001 统计单词个数
题三 统计单词个数(30分) 问题描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k&l ...
- Codevs_1040_[NOIP2001]_统计单词个数_(划分型动态规划)
描述 http://codevs.cn/problem/1040/ 与Codevs_1017_乘积最大很像,都是划分型dp. 给出一个字符串和几个单词,要求将字符串划分成k段,在每一段中求共有多少单词 ...
- Codevs 1040 统计单词个数
1040 统计单词个数 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个长度不超过200的 ...
- codevs1040统计单词个数(区间+划分型dp)
1040 统计单词个数 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个长度不超 ...
随机推荐
- 如何利用Hadoop存储小文件
**************************************************************************************************** ...
- jquery添加刪除
創建元素的方法:jquery.javascript/dom,html/text var txt1="<p>Text.</p>"; ...
- 一名网工对Linux运维的一次经历
我是一名名副其实的网络工程师,驻场于某市数字化城乡管理指挥中心(简称数字城管),主要针对中大型网络系统,路由.交换机.存储.小型机等设备进行维护,主要工作职责主要分为两种: 对网络系统中的网络设备(路 ...
- mysql 创建表指定 字符类型与存储引擎
DROP TABLE IF EXISTS apilog; /*==============================================================*/ /* T ...
- 小程序源码下载[demo整理自github]
微信小程序的火热程度大家都有所了解,也有很多牛人写了不错的小程序,今天ytkah就整理一些github上的小程序开源项目,源码可以直接下载来用,感兴趣的朋友赶紧去看看吧!以下小程序排名按star的数量 ...
- MT【44】抛物线不常见性质3
注:S为抛物线的焦点
- pdo连接的时候设置字符编码是这样的
$pdo = new \PDO(..,..,..) $pdo->query('SET NAMES utf8mb4'); $pdo->exex('sql....');
- 在Java Web程序中使用监听器可以通过以下两种方法
之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...
- 【BZOJ1821】[JSOI2010]部落划分(二分,并查集)
[BZOJ1821][JSOI2010]部落划分(二分,并查集) 题面 BZOJ 洛谷 题解 二分答案,把距离小于二分值的点全部并起来,\(\mbox{check}\)一下是否有超过\(K\)个集合就 ...
- luogu1966 火柴排队(离散化+树状数组)
由于是一个二次函数的关系,所以易证应该尽量让两组的顺序相同 然后就离散化乱搞几发,最后就变成了求逆序对的数量了 #include<bits/stdc++.h> #define pa pai ...