传送门

想了个4次方算法,没想到也A了,数据真是水。

其实两个字符串匹配那部分可以用kmp优化

——代码

 #include <cstdio>
#include <cstring> int n, m, f[];
char s[], a[][]; inline int max(int x, int y)
{
return x > y ? x : y;
} int main()
{
int i, j, k, l, len;
scanf("%s %d", s + , &n);
for(i = ; i <= n; i++) scanf("%s", a[i] + );
m = strlen(s + );
for(i = ; i <= m; i++)
for(j = ; j <= n; j++)
{
len = strlen(a[j] + );
if(i >= len)
for(k = i; k; k--)
{
for(l = len; l; l--) if(s[k - (len - l)] ^ a[j][l]) break;
if(!l) f[i] = max(f[i], f[k - len] + );
}
}
printf("%d\n", f[m]);
return ;
}

正解

f[i] 表示前 i 个字符串的最优解

f[i] = max(f[i], f[i - 1])

f[i] = max(f[i], f[j - 1] + 1) (len[j ~ i] 为字典中出现过的单词)

len[j ~ i] 是以 j 为前缀的单词,可以用trie树搞。

——代码

 #include <cstdio>
#include <cstring>
#define idx(x) x - 'a'
#define max(x, y) ((x) > (y) ? (x) : (y)) int n, cnt;
int ch[][], val[], f[];
char s[], a[]; inline void insert()
{
int i, x, now = , len = strlen(a);
for(i = ; i < len; i++)
{
x = idx(a[i]);
if(!ch[now][x]) ch[now][x] = ++cnt;
now = ch[now][x];
}
val[now]++;
} int main()
{
int i, j, len, now;
scanf("%s", s + );
scanf("%d", &n);
for(i = ; i <= n; i++)
{
scanf("%s", a);
insert();
}
len = strlen(s + );
for(i = ; i <= len; i++)
{
f[i] = max(f[i], f[i - ]);
for(j = i, now = ; ch[now][idx(s[j])] && j <= len; j++)
{
now = ch[now][idx(s[j])];
if(val[now]) f[j] = max(f[j], f[i - ] + );
}
}
printf("%d\n", f[len]);
return ;
}

[luoguP2031] 脑力达人之分割字串(DP)的更多相关文章

  1. P2031 脑力达人之分割字串

    P2031 脑力达人之分割字串字符串dp,f[i]表示主串到第i个字符,最多能分割成多少子串.f[i]=max(f[i],f[k]+1);k是能匹配到的前一位. #include<iostrea ...

  2. 洛谷 P2031 脑力达人之分割字串

    题目传送门 解题思路: f[i]表示到第i位可获得的最大分割次数,对于每个f[i]都可由其符合条件的前缀转移过来,条件就是当前串除了前缀的剩余字符里有所给单词,然后一看,这不是在剩余字符里找有没有所给 ...

  3. PHP 分割字串 Function 的速度比較(substr/sscanf/preg_match)---substr最快!

    固定長度的字串(假設是 06481a63041b578d702f159f520847f8), 要照固定格式做切割, 使用 PHP 要怎麼切會比較快? 註: 要將此字串切成 => 06 / 48 ...

  4. 根据token分割字串

    #include <iostream> #include <string> #include <cstring> int main() { const char * ...

  5. 【Foreign】字串变化 [DP]

    字串变化 Time Limit: 10 Sec  Memory Limit: 128 MB Description 定义一个(大写字母)字符串集合{S},初始时值包含一个给定的字符串S1,每次从中任意 ...

  6. 字串符相关 split() 字串符分隔 substring() 提取字符串 substr()提取指定数目的字符 parseInt() 函数可解析一个字符串,并返回一个整数。

    split() 方法将字符串分割为字符串数组,并返回此数组. stringObject.split(separator,limit) 我们将按照不同的方式来分割字符串: 使用指定符号分割字符串,代码如 ...

  7. 【NOIP2015】字串

    [NOIP2015]字串 标签: DP NOIP Description 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其 ...

  8. shell脚本 字串截取 正则表达式

    字串处理 子串截取方法一:使用${}表达式格式:echo ${x:起始位置:长度}(起始位置编号从0开始,可省略) 方法二:使用expr substr格式:expr substr "$x&q ...

  9. P1279 字串距离

    P1279 字串距离一看就是字符串dp,然而并不会,骗分之后爆零了.以后dp题要好好想想转移方程.f[i][j]表示是a串选了前i个字符,b串选了前j个字符的距离.显然(QAQ)f[i][j]=min ...

随机推荐

  1. visual studio使用dos命令在生成项目时复制文件到指定目录

    本人使用软件:vs2015 拷贝“项目1”的 bin目录 下, 项目配置的名称(“Release”,“Debug”)目录下,所有内容到“项目2”输出目录(存在直接覆盖): xcopy $(Soluti ...

  2. bzoj1770: [Usaco2009 Nov]lights 燈(折半搜索)

    1770: [Usaco2009 Nov]lights 燈 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1153  Solved: 564[Submi ...

  3. 10.27night清北刷题班

    /* 枚举每个部分的总和,利用前缀和进行检验. 如果能分成4部分就一定能分成2部分,就筛了一边素数优化.清空数组!!! */ #include<bits/stdc++.h> #define ...

  4. [Swift]经典解题思路:联合查找Union Find

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. Django day35 redis连接池,redis-list操作,django中使用redis,支付宝支付

    一:redis连接池, 二:redis-list操作, 三:django中使用redis, 四:支付宝支付

  6. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-K-Matrix Multiplication(矩阵乘法)

    题目描述 In mathematics, matrix multiplication or matrix product is a binary operation that produces a m ...

  7. C# 生成 bmp 格式的图片

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; usin ...

  8. Java&Xml教程(八)使用JDOM将Java对象转换为XML

    在前面的教程中我们学习了如何使用JDOM解析和修改XML文件内容,本节介绍如何将Java对象转换为XML数据并生成文件. JDOM的Document类提供了便捷的方法创建元素和属性,XMLOutput ...

  9. 人人都能读懂的css3 3d小demo

    css3 3d案例总结 最近入坑 Web 动画,所以把自己的学习过程记录一下分享给大家.就把最近做的比较好的给大家分享下 1.旋转拼图 首先看下效果 代码主要由HTML和CSS3组成,应该说还是比较简 ...

  10. oa系统部署

    1.配置java环境变量 新建:JAVA_HOME C:\Program Files\Java\jdk1.6.0_45 path添加   C:\Program Files\Java\jdk1.6.0_ ...