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与动态规划的更多相关文章

  1. NFA转DFA - json数字识别

    json的主页上,提供了number类型的符号识别过程,如下: 图片引用:http://www.json.org/json-zh.html 实际上这张图片表示的是一个状态机,只是状态没有标出来.因为这 ...

  2. 动态规划之KMP字符匹配算法

    KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂. 很多读者抱怨 KMP 算法无法理解,这很正常,想到大学教材上关于 KMP 算法的讲解 ...

  3. 基于DFA敏感词查询的算法简析

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要对敏感词做一个过滤,首先有几个方案可以选择: a.直 ...

  4. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  5. 简单动态规划-LeetCode198

    题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...

  6. java实现敏感词过滤(DFA算法)

    小Alan在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和大家分享一下自己的理解. 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxo ...

  7. 使用DFA做文本编辑器的自动提示

    之前看龙书的时候,龙书提到可以在编译器里用动态的生成的NFA自动机来动态匹配自己的输入串,NFA的简单实现其实写起来非常简单,但是我是实际凭感觉写完之后,却觉得并不是非常的好用,在处理自己已经输入过的 ...

  8. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  9. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

随机推荐

  1. 探讨一下js中的继承和原型链

    ---恢复内容开始--- 每个JS对象一定对应一个原型对象,并从原型对象继承属性和方法. 也就是说 对象的__proto__属性的值就是它所对应的原型对象, 而prototype 只有函数才有的属性. ...

  2. iOS App的几种安全防范

    虽然公司的项目目前还不算健壮,安全问题对于大部分小公司来说似乎并没什么必要,不过要攻击的话,我有十足的把握,我们是无法承受冲击的.嘿嘿嘿~不过带着一颗入坑iOS的心思,搜集了一下资料后,还是做了一些尝 ...

  3. windows 连接 Linux 云服务器

    1.在我们购买了 阿里云 或者 腾讯云后,如果选择使用的是 Linux 系统,在 windows 上要远程连接,需要用到的是 putty 这一个软件 putty 官网:https://www.putt ...

  4. nodeJS 项目如何运行

    nodeJS 项目如何运行 一.总结 一句话总结: nodejs项目根目录中用node xx.js 或是 node xx运行 打开 window的 cmd 命令窗口,使用 cd 命令跳转到 nodeJ ...

  5. PS改变图片像素大小(一寸照片变二寸)

    1.打开Photoshop,点击“文件”菜单,选择“打开”,将要处理的图片加载进来 2.找到“图像”菜单,选择“图像大小”,我们在这里对图片进行处理. 3.根据需要对其分辨率或者尺寸进行设置,设置好后 ...

  6. ElasticSearch——分页查询

    前言 ElasticSearch实现分页查询,有3种方式,他们在数据查询中各自占据着不同的优势,因此在搜索引擎的数据分页过程中,如何更好地利用各自的优势来进行数据查询是一个非常重要的过程. 传统分页( ...

  7. 福昕PDF电子文档处理套装软件中文企业版9.01

    下载地址:http://zbh.ustc.edu.cn/msiso/FoxitPDFEditor901_ZH_Setup.msi 激活码:A7000-010S0-RC900-XVF4R-9J5OM-W ...

  8. 4.1 python类的特殊成员,偏函数,线程安全,栈,flask上下文

    目录 一. Python 类的特殊成员(部分) 二. Python偏函数 1. 描述 2. 实例一: 取余函数 3. 实例二: 求三个数的和 三. 线程安全 1. 实例一: 无线程,消耗时间过长 2. ...

  9. 【ABAP系列】SAP ABAP 高级业务应用程序编程(ABAP)

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 高级业务应用程 ...

  10. 【极简版】OpenGL 超级宝典(第五版)环境配置 VS2010

    事先声明:该教程仅适用于VS2010环境下超级宝典第五版的配置 第一步:下载示例代码和环境包: 链接:https://pan.baidu.com/s/1llRRQ8ymBgMGuXp5M50pJw 提 ...