此题 字符串匹配+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 统计单词个数的更多相关文章

  1. luogu P1026 统计单词个数

    题目链接 luogu P1026 统计单词个数 题解 贪心的预处理母本串从i到j的最大单词数 然后dp[i][j] 表示从前i个切了k次最优解 转移显然 代码 #include<cstdio&g ...

  2. [luogu]P1026 统计单词个数[DP][字符串]

    [luogu]P1026 统计单词个数 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1&l ...

  3. 第六章 第一个Linux驱动程序:统计单词个数

    现在进入了实战阶段,使用统计单词个数的实例让我们了解开发和测试Linux驱动程序的完整过程.第一个Linux驱动程序是统计单词个数. 这个Linux驱动程序没有访问硬件,而是利用设备文件作为介质与应用 ...

  4. 第六章第一个linux个程序:统计单词个数

    第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数.  第 1 步:建立 Linu x 驱 ...

  5. NOIP200107统计单词个数

    NOIP200107统计单词个数 难度级别: A: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给出一个长度不超过200的由 ...

  6. NOIP2001 统计单词个数

    题三 统计单词个数(30分) 问题描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k&l ...

  7. Codevs_1040_[NOIP2001]_统计单词个数_(划分型动态规划)

    描述 http://codevs.cn/problem/1040/ 与Codevs_1017_乘积最大很像,都是划分型dp. 给出一个字符串和几个单词,要求将字符串划分成k段,在每一段中求共有多少单词 ...

  8. Codevs 1040 统计单词个数

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

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

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

随机推荐

  1. Test Scenarios for a window

    1 check if default window size is correct2 check if child window size is correct3 check if there is ...

  2. Bootstrap手风琴效果

    前面的话 Bootstrap 框架中 Collapse插件(折叠)其实就是我们常见的手风琴效果.当单击一个触发元素时,在另外一个可折叠区域进行显示或隐藏,再次单击时可以反转显示状态.经典的场景是多个折 ...

  3. BZOJ3307雨天的尾巴——线段树合并

    题目描述 N个点,形成一个树状结构.有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成所有发放后,每个点存放最多的是哪种物品. 输入 第一行数字N,M接下来N ...

  4. 【长期更新】 PHP题目

    1.要求在一组数中,插入一个新数,并维护原来的排序方式不变 <?php //1.要求在一组数中,插入一个新数,并维护原来的排序方式不变 function insertArr($arr,$val) ...

  5. MT【56】2017联赛一试解答最后一题:一道复数题的几何意义

  6. MT【31】傅里叶级数为背景的三角求和

    接下来要讲的这道题,背景有点复杂,不要求99%的学生看的懂背景,但是解答过程中涉及的反证法以及第二数学归纳法对自主招生的学生来说倒是不错的学习机会. 解答: 评 : 本题的背景为高等数学中的傅里叶分析 ...

  7. loj #116. 有源汇有上下界最大流

    题目链接 有源汇有上下界最大流,->上下界网络流 注意细节,重置cur和dis数组时,有n+2个点 #include<cstdio> #include<algorithm> ...

  8. CodeForces 1110F Nearest Leaf | 线段树/换根

    我--又诈尸了-- 代码几乎都不会写了,打场CF居然上分啦,开心!(虽然还是比不过列表里的各路神仙) 题目链接 题目描述 一棵\(n\)个点的有根树,规定一种dfs序(规则:编号小的点优先dfs),\ ...

  9. JNative 传递参数bug

    下载JNative网址:http://sourceforge.net/projects/jnative/files/jnative/ 下载JNative版本:JNative_1.4RC3_bin.zi ...

  10. mathML如何在谷歌浏览器进行展示

    前几天不是做了个word公式的解析吗,就是office插入的公式是个xmlObject对象,读出来就是个String,所以要进行转换才能在网页上展示,其实我对这方面也不是很了解,然后各种百度解决方案, ...