首页 > 其他分享 >DP乱讲

DP乱讲

时间:2024-05-27 21:24:09浏览次数:14  
标签:状态 乱讲 一般 背包 就是 转移 DP

DP

必要的

本文仅凭我的低水平理解写出, 确实对DP不擅长, 所以写一篇文章理一理, 所以很多内容不会将很清楚, 甚至有可能只有我能看懂, 可能在未来会逐渐完善。

据我现在的理解, DP 似乎与 数学归纳法 是等价的? 我们钦定 \(f(k)\) 是正确的, 只要能够推出 \(f(k + 1)\) 是正确的, 那么就都是正确的。
我们再考虑 DP 的中文名: 动态规划 再翻译一下就是: 动态的规划

以此为引, 讲一下写 DP 一些重要的东西。

  1. 设计状态, 其实就是上文的 \(f(x)\), 但是一般不止一个变量, 可以是 \(f(x, y, z)\)等等, \(x, y, z\) 一般是得出答案所必需的一些信息, \(f\)函数的值一般就是答案或者与答案非常相关。

  2. 设计转移, 转移实际上是依托于状态设计的, 状态设计对了, 转移就顺水推舟得到了, 一般就是考虑 \(f(x)\) 怎么推出 \(f(x + 1)\)。

  3. 最优子结构, 其实就是考虑非线性的问题, 对标 \(f(k)\) 推出 \(f(k + 1)\)找到一个小结构, 很多个小结构就可以推出全局, 比如树的最优子结构一般就是子树。

背包

典中典
其实我觉得最重要的就是理解完全背包的思想, 顺序枚举, 把选取的结果累起来, 就可以实现选多个。

01背包

完全背包

多重背包

分组背包

有依赖的背包(树型)

线性DP

难在状态, 不要看他很基础, 他可以出的很难, 有些时候必须要状态设计的很巧妙。

区间DP

难在转移, 状态比较无脑, 就是小区间推向大区间。

树型DP

难在转移, 状态一般就是子树。

状压DP

难在状态, 我把它看作多维的线性DP, 我们不可能手开那么多维数组, 所以压成了进制数。

概期DP

难在抽象, 要想学会, 首先得对概率期望熟悉, 有数学知识打基础, 反正我还不怎么会。

计数DP

难在转移, 不重不漏很关键, 一般计数的思路一定是很清晰, 很简洁, 如果是混乱的, 很难做到不重不漏。

数位DP

难在状态, 需要通过题意抓住性质, 在优化你的状态。

动态DP

难在他就是难, 要用数据结构维护转移, 这样就可以实现修改, 所以叫动态DP, 综合性比较强。

DAGDP

不咋会

插头DP

不咋会

题目等我归纳一下。

标签:状态,乱讲,一般,背包,就是,转移,DP
From: https://www.cnblogs.com/qerrj/p/18216537

相关文章

  • dp by zhx
    dp是什么动态规划,三要素:状态、转移,初始化。状态是最基础的,转移是状态之间的关系,初始化是状态的边界,如何设计状态。引入-1.-1P1216[IOI1994]数字三角形给一个数字三角形,可以向下或向右下走,试问路径数字和的最大值。状态:\(f_{i,j}\)表示在\((i,j)\)时的最大权值和。为什么......
  • H3CNE-7-TCP和UDP协议
    TCP和UDP协议TCP:可靠传输,面向连接--------速度慢,准确性高UDP:不可靠传输,非面向连接--------速度快,但准确性差面向连接:如果某应用层协议的四层使用TCP端口,那么正式的数据报文传输之前,需要先建立连接,只有建立完连接之后,才可以传输数据。TCP三次握手......
  • 【C++】牛客 ——DP36 abb
    ✨题目链接:DP36abb✨题目描述 leafee最近爱上了abb型语句,比如“叠词词”、“恶心心”leafee拿到了一个只含有小写字母的字符串,她想知道有多少个"abb"型的子序列?定义:abb型字符串满足以下条件:字符串长度为3。字符串后两位相同。字符串前两位不同。✨输入......
  • 添加括号(区间dp+求方案)
    添加括号题目背景给定一个正整数序列a(1),a(2),…,a(n),(1<=n<=20)不改变序列中每个元素在序列中的位置,把它们相加,并用括号记每次加法所得的和,称为中间和。例如:给出序列是4,1,2,3。第一种添括号方法:((4+1)+(2+3))=((5)+(5))=(10)有三个中间和是5,5,10,它们之和为:5+5+10=20......
  • 赛克 1530(环形dp)
    赛氪OJ-专注于算法竞赛的在线评测系统(saikr.com)枚举第一张卡片是由法力值降低还是法力值上升得到的,一共有4种情况,d[i][j][0]表示第i个卡牌选第j个法力值并且上一个卡牌的法力值大于j的所获得的前i个卡牌的最大运气值;d[i][j][1]表示第i个卡牌选第j个法力值并且上一个卡牌的法力......
  • vb.net 利用APi 、句柄,通过GetWindowThreadProcessId 获得窗口所在进程ID和线程ID 结
    '''<summary>'''声明'''</summary>'''<paramname="hwnd"></param>'''<paramname="lpdwProcessId"></param>......
  • 蓝桥杯备赛——DP【python】
    一、小明的背包1试题链接:https://www.lanqiao.cn/problems/1174/learning/问题描述输入实例52016253851533输出示例37问题分析这里我们要创建一个DP表,DP(i,j)表示处理到第i个物品时消耗j体积。这样我们在输入数据时可以直接进行操作。对于每一个dp[i][j]我......
  • hi.选课(树形DP)
    [CTSC1997]选课(树形DP)题目描述在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有N......
  • Java ThreadPoolExecutor
    ThreadPoolExecutor?ThreadPoolExecutor是什么,先拆开来看,ThreadPoolAndExecutor?那ThreadPool是什么?Executor又是什么?Executor:任务执行者,只定义了一个execute方法,接收一个Runable参数。publicinterfaceExecutor{voidexecute(Runnablecommand);}ThreadPool:可以缓存......
  • 区间DP
    区间DP区间DP的一般表达式:枚举区间长度枚举区间起点计算区间终点枚举区间断点P1220关路灯状态dp[i][j][0/1]表示区间[i,j]的路灯全关掉且站在i或j处的最小功耗答案min(dp[1][n][0],dp[1][n][1])状态转移for(intlen=2;len<=n;len++){ for(inti=1;i+len-1<=n;i++){......