首页 > 其他分享 >【动态规划】“新手动态规划合集”题解

【动态规划】“新手动态规划合集”题解

时间:2023-09-03 15:57:41浏览次数:49  
标签:题解 max 序列 长度 cases 动态 规划

动态规划三要素

阶段,状态,决策

动态规划经典模型

LIS(最长上升子序列)

给定长度为 \(N\) 的序列 \(A[i]\),求出其最长上升子序列的长度。(以不严格上升为例)

  • 阶段:已经处理的序列长度 \(i\)

  • 状态:\(f[i]\) 表示以 \(A[i]\) 结尾的 LIS 长度

  • 转移

\[f[i]=\max\limits_{j\in\left[1,i-1\right]\wedge A[j]\leq A[i]}f[j]+1 \]

这个转移是 \(\Theta(N^2)\) 的。事实上可以通过二分来优化到 \(\Theta(N\log N)\),但是不甚通用。

LCS(最长公共子序列)

给定长度为 \(N\) 的序列 \(A[i]\) 和长度为 \(M\) 的序列 \(B[i]\),求出其 LCS 长度。

  • 阶段:\(A\) 已经处理的长度 \(i\),\(B\) 已经处理的长度 \(j\)

  • 状态:\(f[i,j]\) 表示 \(A[1..i]\) 与 \(B[1..j]\) 的 LCS 长度

  • 转移

\[f[i,j]= \max\begin{cases} \max(f[i-1,j],f[i,j-1]), \\ f[i-1,j-1]+1, \text{if } A[i]=B[j] \end{cases}\]

时间复杂度 \(\Theta(NM)\)。

新手动态规划合集题单题解

P1359 租用游艇

给定从 \(i\) 到 \(j\) 的代价 \(w[i,j]\)(\(i\lt j\)),求出从 \(1\) 地到 \(N\) 地的最小代价。

设 \(f[i]\) 表示从 \(1\) 到 \(i\) 的最小代价。转移方程:

\[f[i]=\max\limits_{j\in[1,i-1]}\left(f[j]+w[j,i]\right) \]

初值:\(f[1]=0\),其余均为正无穷。目标:\(f[n]\)。

P1060 [NOIP2006 普及组] 开心的金明

有 \(n\) 元,\(m\) 个物品。第 \(i\) 个物品价值为 \(v[i]\),权值为 \(w[i]\)。选定一些物品,在 \(\sum w[i]\leq n\) 的前提下,\(\sum v[i]\times w[i]\) 最大。

这本质上是一个 0-1 背包问题。每个物品质量为 \(v[i]\),价值为 \(v[i]\times w[i]\)。

于是设 \(f[i,j]\) 为考虑到第 \(i\) 个物品时,花费 \(j\) 元所得最大值。于是

\[f[i, j]=max(f[i,j],f[i-1,j-v[i]]+v[i]\times w[i]) \]

然后可以利用滚动数组优化,注意别滚反了

P1802 5 倍经验日

有 \(x\) 瓶药,\(n\) 个人,对第 \(i\) 个人使用 \(m\) 瓶时,获得经验为

\[\begin{cases} win[i], m \geq use[i] \\ lose[i], m \lt use[i] \end{cases} \]

求出获得经验最大值。

这也是一个背包模型。设 \(f[i,j]\) 为考虑到第 \(i\) 个人,使用 \(j\) 瓶药时的经验最大值。于是

标签:题解,max,序列,长度,cases,动态,规划
From: https://www.cnblogs.com/Starrykiller/p/dp-part1.html

相关文章

  • javeee spring cglib动态代理
    cglib动态代理依赖<dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>3.2.4</version></dependency>代理类packagecom.test.cglibProxy;importnet.sf.cglib.proxy.En......
  • [ABC318D] General Weighted Max Matching 题解
    [ABC318D]GeneralWeightedMaxMatching题解题意  给定无向有权完全图,求最大权匹配。思路分析  注意到\(n\le16\),我考虑状压DP。  设当前点集\(S\)中最大权匹配的答案是\(f_S\),我们考虑\(S\)中“最后”一个点\(p\)(这里的“最后”一个点是指,在状压表示状态......
  • javaee spring jdk动态代理
    jdk动态代理packagecom.test.jdkProxy;publicinterfaceIUsersService{publicvoidinsert();}packagecom.test.jdkProxy;//目标类publicclassUsersServiceimplementsIUsersService{@Overridepublicvoidinsert(){System.out.println(&qu......
  • [ABC318E] Sandwiches 题解
    题意给定一个长度为\(N\)的正整数列\(A=\left(A_1,A_2,\cdots,A_N\right)\),求满足以下条件的正整数三元组\(\left(i,j,k\right)\)的数量:\(1\lei<j<k\leN\);\(A_i=A_k\);\(A_i\neqA_j\)。数据范围:\(3\leN\le3\times10^5\);\(1\leA_i......
  • CF1848B Vika and the Bridge 题解
    CF1848BVikaandtheBridge题解题目大意给个题目传送门吧,感觉题意已经很清楚了题目传送门分析(我不会告诉你我第一眼看过去是二分)因为我们只能改一块木板的颜色,所以可以考虑贪心。大概算了下复杂度,也没有问题。题解我们要去求每种颜色最大距离的最小值,那我们可以先去求......
  • 有关Vue-Cli5.X工程中ESLint组件命名检查问题解决
    个人开发环境简介,工具用的VisualStudioCode,因为每个人的开发环境不同,不可能所有解决方案通用,防止踩坑。PSF:\VueWorkSpace\vue_router_test>node-vv16.12.0PSF:\VueWorkSpace\vue_router_test>npm-v8.1.0PSF:\VueWorkSpace\vue_router_test>npmeslint-v8.1.0......
  • P3604 美好的每一天题解
    传送门好题!首先说这道题的时间复杂度:\(O(26n\sqrtn)\)。因为转移是的常数是\(O(26)\)并非\(O(1)\),这启示我们,看数据范围,不要被O(1)给限制了,O(1)是一般情况,有些题不一般首先,回文串能出现的条件是所有的字符都出现偶数次\(or\)仅有一个字符出现奇数次,所以我们并不关心每个......
  • 【题解】AtCoder Beginner Contest 318(D - Ex)
    赛时过了A-G,Ex仿佛猜到了结论但是完全不懂多项式科技,就炸了。大家好像都秒了A,B,C就不写了。D.GeneralWeightedMaxMatching题目描述:给你一个加权无向完全图,图中有\(N\)个顶点,编号从\(1\)到\(N\)。连接顶点\(i\)和\(j\)的\((i<j)\)的权重为\(D_{i,j}\)。在......
  • P4198 楼房重建题解
    传送门一眼数据结构。考虑线段树,记录该区间能看到最多的建筑数量\(ans_{wz}\)以及看到区间中最大的斜率(或者说,该区间内最后看到的建筑)\(xl_{wz}\)。很明显,假如我现在的修改操作是\((x,y)\),那么会改变\(\log_n\)个节点,即包含\(x\)的节点,考虑如何修改他们的\(ans\)和\(......
  • AT_abc318_e 题解
    AT_abc318_eSandwiches题解Links洛谷AtCoderDescription给定一个长度为\(n\)的序列\(a\),找到满足以下条件的三元组\((a,b,c)\)的数量。\(i<j<k\);\(a_{i}=a_{k}\);\(a_{i}\neqa_{j}\)。数据范围:\(1\leqn\leq3\times10^{5}\),\(1\leqa_{i}\leqn......