NOIP200107统计单词个数

时间:2023-01-14 16:37:55
NOIP200107统计单词个数
难度级别: A; 编程语言:不限;运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述

给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份(1<k<=40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠,但不能选出两个单词而它们的开始位置相同)。

单词在给出的一个不超过6个单词的字典中。
要求输出最大的个数。

输入
第一行有两个正整数p和k
p表示字串的行数;
k表示分为k个部分。
接下来的p行,每行均有20个字符。
再接下来有一个正整数s,表示字典中单词个数。(1<=s<=6)
接下来的s行,每行均有一个单词。
输出
一个整数,对应每组测试数据的相应结果。
输入示例
1 3
thisisabookyouareaoh
4
is
a
ok
sab
输出示例
7

妈妈我发现自己原来写的hash都是错的233333333

对于每个位置,暴力与6个单词进行匹配,计算出区间[l,r]的单词数,然后DP即可。

#include<cstdio>
#include<cctype>
#include<queue>
#include<cstring>
#include<algorithm>
#define hash(x,l) H[x]-H[x+l]*xp[l]
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i!=-1;i=next[i])
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
typedef unsigned long long ull;
const int maxn=;
const int maxk=;
char s[][maxn],S[maxn];
ull xp[maxn],H[maxn],hs[];
int n,k,m,len,vis[],length[],w[maxn][maxn],vis2[];
int f[maxn][maxk];
int main() {
int T=;
while(T--) {
n=read();k=read();len=;
rep(i,,n) {
rep(j,,) S[++len]=getchar();
getchar();
}
m=read();
rep(i,,m) {
scanf("%s",s[i]);length[i]=strlen(s[i]);
dwn(j,length[i]-,) hs[i]=hs[i]*+s[i][j];
}
dwn(i,len,) H[i]=H[i+]*+S[i];
xp[]=;rep(i,,len) xp[i]=xp[i-]*;
rep(l,,len) rep(r,l,len) {
int sum=;
rep(i,l,r) {
int ok=;
rep(id,,m) if(length[id]+i-<=r) {
if(hash(i,length[id])==hs[id]&&!ok) ok=,sum++;
}
}
w[l][r]=sum;
}
rep(i,,len) f[i][]=w[][i];
rep(j,,k) rep(i,j,len) {
f[i][j]=;
rep(t,j-,i-) f[i][j]=max(f[i][j],f[t][j-]+w[t+][i]);
}
printf("%d\n",f[len][k]);
}
return ;
}

NOIP200107统计单词个数的更多相关文章

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

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

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

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

  3. NOIP2001 统计单词个数

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

  4. Codevs&lowbar;1040&lowbar;&lbrack;NOIP2001&rsqb;&lowbar;统计单词个数&lowbar;&lpar;划分型动态规划&rpar;

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

  5. luogu P1026 统计单词个数

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

  6. Codevs 1040 统计单词个数

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

  7. codevs1040统计单词个数(区间&plus;划分型dp)

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

  8. P1026 统计单词个数——substr

    P1026 统计单词个数 string 基本操作: substr(x,y) x是起始位置,y是长度: 返回的是这一段字符串: 先预处理sum[i][j],表示以i开头,最多的单词数: 从后往前寻找,保 ...

  9. &lbrack;luogu&rsqb;P1026 统计单词个数&lbrack;DP&rsqb;&lbrack;字符串&rsqb;

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

随机推荐

  1. 干货——myeclipse快捷键

    好了废话不多说.先上快捷键快捷键 alt    alt+           返回操作记录的上一步    alt+        返回操作记录的下一步    alt+shift+o        同一 ...

  2. 【微信Java开发 --番外篇】错误解析

    虽然在微信开发过程中,会有微信公众平台开发者文档中的<全局返回码>作为错误的参考对比:但是依旧的,会觉得有时候的问题莫名其妙.[注:本人使用weixin-java-tools进行开发] 下 ...

  3. &lbrack;LintCode&rsqb; Binary Tree Paths 二叉树路径

    Given a binary tree, return all root-to-leaf paths.Example Given the following binary tree: 1 /   \2 ...

  4. pyQuery

    pyquery – PyQuery complete API 选择器基本支持jQuery用法 class pyquery.pyquery.PyQuery(*args, **kwargs) The ma ...

  5. 安装centreon

     Centreon + nagios + ndoutils 安装 2013-09-25 19:42:44 标签:centreon 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者 ...

  6. 关于Clone 的方法使用

    package cn.hncu.day7.clone.v1;//克隆的套路:// 第1步:重写User类的clone()方法,以供外面调用.因为外面的类无法直接调用User类父类中的clone()方法 ...

  7. 如何使用GCD&lpar;ZZ&rpar;

    什么是GCD?       Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法.该方法在Mac OS X 10.6雪豹中首次推出,并随后被引入到了iOS4 ...

  8. underscorejs-countBy学习

    2.20 countBy 2.20.1 语法 _.countBy(list, iteratee, [context]) 2.20.2 说明 排序一个列表组成一个组,并且返回各组中的对象的数量的计数.类 ...

  9. C&plus;&plus; 11学习&lpar;1&rpar;:lambda表达式

    转载请注明,来自:http://blog.csdn.net/skymanwu #include <iostream> #include <vector> #include &l ...

  10. UX2内核浏览加速技术纲要

    UX2内核是本人负责主要开发的浏览服务项目,其主要目的是为开发者提供一个简单好用.轻便的网络浏览服务.UX2内核的安卓端是基于WebView进行深度优化的,同时欢迎大家使用这个内核用于app页面或浏览 ...