洛谷1026(字符串dp)
常规dp。看到数据很小就直接暴力了,没有预处理。kmp好像过分了……
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
#include <bitset>
using namespace std;
int n, k, t, dp[205][45];
string T = "#", S[10];
int Next[10][30];
void Get_Next(string str, int id) {
	Next[id][1] = 0;
	for (int i = 2, j = 0; i < str.length(); i++) {
		while (j && str[j + 1] != str[i])	j = Next[id][j];
		if (str[j + 1] == str[i])	j++;
		Next[id][i] = j;
	}
}
void Get_f(bitset<205>& bst, string s, int id, string T) {
	int n = s.length() - 1;
	for (int i = 1, j = 0; i < T.length(); i++) {
		while (j && (j == n || T[i] != s[j + 1]))	j = Next[id][j];
		if (T[i] == s[j + 1])	j++;
		if (j == n)	bst[i - n + 1] = 1;
	}
}
int calc(string str) {
	bitset<205> bst;
	bst.reset();
	for (int i = 0; i < t; i++) {
		Get_f(bst, S[i], i, str);
	}
	return bst.count();
}
int main() {
	cin >> n >> k;
	for (int i = 0; i < n; i++) {
		string s;
		cin >> s;
		T += s;
	}
	cin >> t;
	for (int i = 0; i < t; i++) {
		cin >> S[i];
		S[i] = '#' + S[i];
		Get_Next(S[i], i);
	}
	for (int i = 1; i < T.length(); i++) {
		for (int j = 1; j <= k; j++) {
			for (int p = j; p < i; p++) {
				dp[i][j] = max(dp[i][j], dp[p - 1][j - 1] + calc(T.substr(p - 1, i - p + 2)));
			}
		}
	}
	cout << dp[T.length() - 1][k] << '\n';
	return 0;
}
洛谷1026(字符串dp)的更多相关文章
- 洛谷教主花园dp
		洛谷-教主的花园-动态规划 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价 ... 
- 洛谷 p6858 深海少女与胖头鱼 洛谷月赛 期望dp
		洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 ( ... 
- 洛谷 简单字符串 'P1055ISBN号码' 问题
		题目描述如下: 知识点①:char数组与int型数字进行运算时,需要将 char[i]-'0' .比如 char c[5]; int i; for(i=0;i<5;i++) scanf(&quo ... 
- 【洛谷1026】【NOIP2001】统计单词个数
		题面 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包 ... 
- 洛谷P4719 动态dp
		动态DP其实挺简单一个东西. 把DP值的定义改成去掉重儿子之后的DP值. 重链上的答案就用线段树/lct维护,维护子段/矩阵都可以.其实本质上差不多... 修改的时候在log个线段树上修改.轻儿子所在 ... 
- 洛谷 P3370 字符串哈希 (模板)
		<题目链接> <转载于 >>> > 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共 ... 
- 2018普及组摆渡车洛谷5017(dp做法)
		啦啦啦,这一篇是接上一篇的博客,上一篇是记忆化搜索,而这一篇是dp+前缀和小技巧 dp这种玄学做法我这种蒟蒻当然不是自己想出来的,参考https://blog.csdn.net/kkkksc03/ar ... 
- 洛谷P1098 字符串的展开【字符串】【模拟】
		题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数 ... 
- 洛谷 P1098 字符串的展开
		题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数 ... 
随机推荐
- eclipse自动生成带参数说明方法注释
			自动生成方法的注释格式,例如 /*** @param str* @return * @throws ParseException*/ 快捷键是alt+shift+j,将光标放在方法名上,按快捷键.会 ... 
- Spring4新的javaConfig注解
			1.@RestController spring4为了更方便的支持restfull应用的开发,新增了RestController的注解,比Controller注解多的功能就是给底下的RequestMa ... 
- linux 创建docker基础镜像
			通过Dockerfile创建镜像时,一般都是基于 Docker Hub 提供的官方镜像.以下分别介绍在ubuntu16和centos7 两个系统上创建个人私有基础镜像的方法. 一.ubuntu16创 ... 
- 百度Apollo解析——1.总介绍
			1. 概括 Apollo源码主要是c++实现的,也有少量python,主要程序在apollo/modules目录中,共18个包,功能包17个: 其中每个模块的作用如下: apollo/modules/ ... 
- GUI编程02
			1 编写一个导航栏 from tkinter import * root = Tk() root.title("测试") root.geometry("400x400+4 ... 
- 如何使CPU占用率为50%
			在Linux下,CPU的状态分为系统态,用户态和空闲态,分别指系统内核执行时间,处于用户态的时间和空闲系统进程执行的时间.三者之和就是CPU的总时间. CPU的利用率就是非空闲进程占用时间的比例. 1 ... 
- Blender 基础 骨架-02 骨架的各种呈现方式
			Blender 基础 骨架-02 - 骨架的各种呈现方式 我使用的Blender版本:Blender V 2.77 前言 在 Blender 基础 骨架-01 教程里面,将骨架和模型联系在一起,我们在 ... 
- Luogu 3629 [APIO2010]巡逻
			先考虑$k = 1$的情况,很明显每一条边都要被走两遍,而连成一个环之后,环上的每一条边都只要走一遍即可,所以我们使这个环的长度尽可能大,那么一棵树中最长的路径就是树的直径. 设直径的长度为$L$,答 ... 
- window.location和window.location.href和document.location的关系
			1,首先来区分window.location和window.location.href. window.location.href是一个字符串. 而window.location是一个对象,包含属性有 ... 
- 选择设置好ext3日志模式
			Linux是一种开放的.因Internet而产生的操作系统.Internet的发展.以网络为中心的计算模式如电子商务被迅速接受和普及,都为 Linux提供了更巨大的机会,使之成为企业和部门级的首选平台 ... 
