DFA与动态规划
1.牛客练习赛45 A
给定字符串, 求字符不相邻的"QAQ"子序列个数.
$dp[i][0]$ 只匹配一个'Q'的方案数的前缀和.
$dp[i][1]$ 只匹配"QA"的方案数的前缀和.
$dp[i][2]$ 匹配完成的方案数的前缀和.
#include <iostream>
#include <cstdio>
#include <string.h>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std;
typedef long long ll; const int N = 1e6+10;
int n;
ll dp[N][3];
char s[N]; int main() {
scanf("%s", s+2);
n = strlen(s+2)+1;
REP(i,2,n) {
if (s[i]=='Q') {
dp[i][2] = dp[i-2][1];
dp[i][0] = 1;
}
else if (s[i]=='A') {
dp[i][1] = dp[i-2][0];
}
REP(j,0,2) dp[i][j]+=dp[i-1][j];
}
printf("%lld\n", dp[n][2]);
}
2. CF 877B
定义一个好字符串为可以分成三段(可能为空), 满足第一段全'a',第二段全'b',第三段全'a'的字符串. 给定字符串s,可以删除若干字符, 要求使s成为好字符串且长度最长, 输出最大长度.
$dp[i][0]$ 匹配第一段的最大长度
$dp[i][1]$ 匹配第二段的最大长度
$dp[i][2]$ 匹配第三段的最大长度
#include <iostream>
#include <cstdio>
#include <string.h>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std; const int N = 1e6+10;
int n, f[3];
char s[N]; int main() {
scanf("%s", s+1);
n = strlen(s+1);
REP(i,1,n) {
if (s[i]=='a') ++f[0],++f[2];
else ++f[1];
f[1] = max(f[1], f[0]);
f[2] = max(f[2], f[1]);
}
printf("%d\n", f[2]);
}
3. CF 1155 D
大意: 给定序列, 可以任选个子段全部乘以$x$, 可以不乘,子段可以为空, 求最大子段和.
最优解可以分成三段: 前一部分不乘, 中间乘$x$, 后一部分不乘.
#include <iostream>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std;
typedef long long ll; const int N = 1e6+10;
int n, x, a[N];
ll dp[N][3]; int main() {
scanf("%d%d", &n, &x);
REP(i,1,n) scanf("%d", a+i);
ll ans = 0;
REP(i,1,n) {
dp[i][0] = dp[i-1][0]+a[i];
dp[i][1] = dp[i-1][1]+(ll)x*a[i];
dp[i][2] = dp[i-1][2]+a[i];
dp[i][0] = max(dp[i][0], 0ll);
dp[i][1] = max(dp[i][1], dp[i][0]);
dp[i][2] = max(dp[i][2], dp[i][1]);
ans = max(ans, dp[i][2]);
}
printf("%lld\n", ans);
}
4. luogu P2389
大意: 给定序列, 要求选出$k$个连续段, 可以为空, 使得和尽量大.
$dp[0][i][j]$为前$i$个数分成$j$段, 第$j$段正在匹配中的最大值.
$dp[1][i][j]$为前$i$个数分成$j$段, 第$j$段已经匹配完成的最大值.
#include <iostream>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std; const int N = 1e3+10;
int n, k, dp[2][N][N], a[N]; int main() {
scanf("%d%d", &n, &k);
REP(i,1,n) scanf("%d", a+i);
int ans = 0;
REP(i,1,n) REP(j,1,k) {
dp[0][i][j] = max(dp[1][i-1][j-1],dp[0][i-1][j])+a[i];
dp[1][i][j] = max(dp[1][i-1][j],dp[0][i][j]);
}
printf("%d\n", dp[1][n][k]);
}
DFA与动态规划的更多相关文章
- NFA转DFA - json数字识别
json的主页上,提供了number类型的符号识别过程,如下: 图片引用:http://www.json.org/json-zh.html 实际上这张图片表示的是一个状态机,只是状态没有标出来.因为这 ...
- 动态规划之KMP字符匹配算法
KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂. 很多读者抱怨 KMP 算法无法理解,这很正常,想到大学教材上关于 KMP 算法的讲解 ...
- 基于DFA敏感词查询的算法简析
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要对敏感词做一个过滤,首先有几个方案可以选择: a.直 ...
- 增强学习(三)----- MDP的动态规划解法
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...
- 简单动态规划-LeetCode198
题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...
- java实现敏感词过滤(DFA算法)
小Alan在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和大家分享一下自己的理解. 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxo ...
- 使用DFA做文本编辑器的自动提示
之前看龙书的时候,龙书提到可以在编译器里用动态的生成的NFA自动机来动态匹配自己的输入串,NFA的简单实现其实写起来非常简单,但是我是实际凭感觉写完之后,却觉得并不是非常的好用,在处理自己已经输入过的 ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
随机推荐
- Embedded based learning
简单整理了一些嵌入式底层需要接触的相关概念. # CPU CU. Control Unit. send need-clac-data -> ALU clac -> get resul ...
- 第11组 Alpha冲刺(6/6)
第11组 Alpha冲刺(6/6) 队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/11913626.html 作业博客 https://edu ...
- ORACLE EXECUTE IMMEDIATE 小结
EXECUTE IMMEDIATE 代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,E ...
- Python3 继承
继承的好处:子类实现父类的全部功能 1.单继承 若父类和子类有共同的方法或属性,则子类对父类方法或属性进行覆盖 class ClassA: def __init__(self): self.a = ' ...
- Python 标准库之 fcntl
在 linux 环境下用 Python 进行项目开发过程中经常会遇到多个进程对同一个文件进行读写问题,而此时就要对文件进行加锁控制,在 Python 的 linux 版本下有个 fcntl 模块可以方 ...
- iOS开发之——keychain使用
iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式.每个ios程序都有一个独立的keychain存储.从ios 3.0开始,跨程序分享keychain变得可行. 使 ...
- 神经网络(NN)实现多分类-----Keras实现
IRIS数据集介绍 IRIS数据集(鸢尾花数据集),是一个经典的机器学习数据集,适合作为多分类问题的测试数据,它的下载地址为:http://archive.ics.uci.edu/ml/machi ...
- WordPress自定义菜单和修改去除多余的css
这里主要是用于模板制作的,一般前端已经写好了,我们只要将前端的内容套用WordPress后台就可以了. 所以我们在模板制作过程中,需要自定义WordPress菜单. 在functions.php文件中 ...
- postman--接口网站测试
直接在官网下载安装即可 https://www.getpostman.com/downloads/
- 【ABAP系列】SAP ABAP替代校验全解析
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP替代校验全解析 ...