1.【扯谈概念】

\(dp\) 套 \(dp\) 其实也就是 \(dp\) 。

这里就定义下面两个概念:

内层 \(dp\) 表示的是被套在里面的那个 \(dp\)

外层 \(dp\) 表示的是最外面的那个 \(dp\)

这样可能比较抽象。

举个例子,像这种形式的 \(dp\) 转移:

\[f[i][j]=\max(f[i][j],f[i][j-k]+g[i][k])
\]

在这里面 \(g[i][k]\) 是不定的,就是我们开始不知道,是我们求出来的,然后我们利用它去进行后面的转移,把它在后面当成一个恒定的 \(val\) 。我们把求解这个 \(g\) 的过程就叫做内层 \(dp\)。

而我们发现 \(f\) 就是我们要求的真正的一个答案状态,然后是把求解这个 \(g\) 的过程包含着的,我们就把求解 \(f\) 的过程叫做外层 \(dp\) 。

而求解这个问题的过程就叫做 \(dp\) 套 \(dp\) 。

本质上说其实 \(dp\) 套 \(dp\) 在我的理解来看就是首先就是将内层的 \(dp\) 结果,作为外层 \(dp\) 进行转移的方法。

如果通俗说就是先算出每一步可能产生的贡献。

然后依托贡献在来进行一次 \(dp\) 。

2.【例题讲解】

你单独看着这个概念,你可能似懂非懂的。

因为这个东西确实有点抽象,下面配合例题来进行讲解。

The First Problem

题意:

有 \(n\) 块木板,每一块木板长度为 \(m\) ,你可以粉刷 \(t\) 次,每次只能粉刷一块木板上连续的一部分为同一颜色(红色或蓝色),给你一个期望粉刷出的木板的颜色,问你最多能粉刷出多少个与期待相同颜色的格子。

题解:

当拿到这个题目的时候,根据传统,它求什么我们就设什么。

我们可以设状态为 \(f[i][j][k]\) 表示刷 \(i\) 次,刷到第 \(j\) 行,第 \(k\) 列的最多正确粉刷数量。

考虑去转移这个方程,发现可以写出这样的状态转移:

\[f[i][j][k]=\sum_{l=0}^{k-1} max(f[i][j][k],f[i-1][j][l]+g[j][l][k])
\]

其中的 \(g[j][l][k]\) 表示的是第 \(j\) 行第 \(l\) 列到第 \(k\) 列的最多粉刷正确数。

注意转移的时候从上一行到下一行的处理。

然后这个方程就没问题了。

分析这么的时间复杂度为 \(O(tnm^3)\)

如果将 \(n\) 与 \(m\) 认为同阶,那么复杂度为 \(O(tn^4)\)

显然不可过的样子,得优化一下。

我们考虑 \(dp\) 的复杂度都来源于哪里?

可能是枚举状态也可能是转移的复杂度。

这个转移的复杂度我们发现是无法有效的优化的(至少我不会)。

然后我们考虑缩小它的状态,我们能发现我们等价于是枚举了每个点的 \(dp\) 情况。

我们试着把它弄为每行的 \(dp\) 情况。

那么状态就变为: \(f[i][j]\) 表示的是第 \(i\) 行刷 \(j\) 次的最大正确粉刷数量。

dp 套 dp扯谈的更多相关文章

  1. bzoj 3864: Hero meet devil [dp套dp]

    3864: Hero meet devil 题意: 给你一个只由AGCT组成的字符串S (|S| ≤ 15),对于每个0 ≤ .. ≤ |S|,问 有多少个只由AGCT组成的长度为m(1 ≤ m ≤ ...

  2. [模板] dp套dp && bzoj5336: [TJOI2018]party

    Description Problem 5336. -- [TJOI2018]party Solution 神奇的dp套dp... 考虑lcs的转移方程: \[ lcs[i][j]=\begin{ca ...

  3. luogu 4158 粉刷匠 dp套dp

    dp套dp 每个木板是个递推的dp,外部是个分组背包 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i&l ...

  4. DP套DP

    DP套DP,就是将内层DP的结果作为外层DP的状态进行DP的方法. [BZOJ3864]Hero meet devil 对做LCS的DP数组差分后状压,预处理出转移数组,然后直接转移即可. tr[S] ...

  5. Codeforces 372B Counting Rectangles is Fun:dp套dp

    题目链接:http://codeforces.com/problemset/problem/372/B 题意: 给你一个n*m的01矩阵(1 <= n,m <= 40). 然后有t组询问( ...

  6. 【BZOJ3864】Hero meet devil DP套DP

    [BZOJ3864]Hero meet devil Description There is an old country and the king fell in love with a devil ...

  7. codeforces 979E(dp套dp)

    题意: 有n个点,编号为1~n.有的点颜色是黑色,有的点颜色是白色,有的点的颜色待涂.你还可以连一些边,但这些边一定是从小编号连到大编号的点. 对于一个确定的图,我们去统计有多少条路径满足“该路径经过 ...

  8. P4590-[TJOI2018]游园会【dp套dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4590 题目大意 给出一个长度为\(m\)的字符串\(s\). 对于每个\(k\in[0,m]\)求有多少个长度为 ...

  9. 洛谷 P5279 - [ZJOI2019]麻将(dp 套 dp)

    洛谷题面传送门 一道 dp 套 dp 的 immortal tea 首先考虑如何判断一套牌是否已经胡牌了,考虑 \(dp\)​​​​​.我们考虑将所有牌按权值大小从大到小排成一列,那我们设 \(dp_ ...

随机推荐

  1. Nextcloud 使用教程

    一.简介 Nextcloud是一个网盘式文件管理系统,多用户权限管理,多客户端,使用简单.可在浏览器中运行,也可下客户端,不论使用哪种方式运行,使用教程都是一样的. 只是在客户端中运行时能及时收到相应 ...

  2. oracle实现通过logminer实现日志抓取分析

    场景:现场库到前置库. 思考:使用触发器? 1.侵入性解决方案 2.需要时各种配置,不需要时又是各种配置 Change Data Capture:捕捉变化的数据,通过日志监测并捕获数据库的变动(包括数 ...

  3. Vue的常用特性

    Vue的常用特性 一.表单基本操作 都是通过v-model 单选框 1. 两个单选框需要同时通过v-model 双向绑定 一个值 2. 每一个单选框必须要有value属性 且value值不能一样 3. ...

  4. 使用Jprofiler分析Java项目的内存开销情况并利用强制回收控制内存

    一.问题背景 自己开发的Java项目中占用太多的Heap Space.即使在Eclipse的虚拟机参数中设置"-Xms128m -Xms2048m -XX:MetaspaceSize=512 ...

  5. Xilinx低比特率高品质 ABR 视频实时转码(HPE 参考架构)

    Xilinx低比特率高品质 ABR 视频实时转码(HPE 参考架构) 介绍 对实时视频流的需求给视频服务提供商带来了严峻挑战,必须在管理基础设施和互联网带宽运营成本,还要为客户提供高质量体验.鉴于视频 ...

  6. YOLOv4 资源环境配置和测试样例效果

    YOLOv4 资源环境配置和测试样例效果 基本环境:cuda=10.0,cudnn>=7.0, opencv>=2.4 一.下载yolov4 git clone https://githu ...

  7. springcloud中 getway中的断言配置: Predicate 9中配置过程, getway的 filters实现限流功能:

    https://www.cnblogs.com/grasp/p/11506426.html 这里引用别人的,,且试验过 ,没问题 server: port: 9527 spring: applicat ...

  8. springboot静态资源映射规则

    一.所有/webjars/**的请求,都会去classpath:/META-INF/resources/webjars/下的目录去找资源. 二.访问/**,即访问任何资源,如果没有controller ...

  9. 你有一份经典SQL语句大全,请注意查收

    一.基础部分 1.创建数据库 CREATE DATABASE dbname 2.删除数据库 DROP DATABASE dbname 3.创建新表 CREATE TABLE tabname(col1 ...

  10. k8s service不能访问排错

    简介 对于新安装的 Kubernetes,经常出现的一个问题是 Service 没有正常工作.如果您已经运行了 Deployment 并创建了一个 Service,但是当您尝试访问它时没有得到响应,希 ...