7.29-7.30集训——dp优化

本文探讨了动态规划中的优化技术,包括决策单调性、四边形不等式、斜率优化和wqs二分。通过实例分析了如何利用这些优化方法解决复杂问题,如区间DP、石子合并问题和最小生成树问题,以提高算法效率。

目录

dp优化

决策单调性

四边形不等式

一种特殊的1D/1D决策单调性

斜率优化

wqs二分


dp优化

  • 根据题目性质优化
  • 数据结构优化
  1. 一般观察转移方程可得
  2. 常用数据结构:单调队列、前缀和、线段树/树状数组
  • 决策单调性优化
  1. 单调栈+二分
  2. 斜率优化
  3. 分治
  4. wqs二分
  5. 凸包优化

POJ1821

k 个人要刷 n 块木板,第 i 个人站在第 s_{i} 块木板上,他可以粉刷长度为 l_{i} 的区间,可以不刷但如果刷的话必须包括 s_{i}。每块木板只能刷一次,每个人刷一块木板可以获得 p_{i} 元。求最大收益和。
1 <= N <= 16000   1 <= K <= 100

  • f[i][j] 表示前 i 个人刷了前 j 个木板的收益
  • f[i][j]=max(f[i−1][k]+(j−k)p[i])  要求第 i 个人能刷 [k+1,j]
  • 把j提出来
  • f[i][j]=max(f[i−1][k]−k∗p[i])+j∗p[i]
  • 以第一维为阶段,那么就是用上一维的一段区间里的最大值,单调队列

gym101986E

给一个长为 n 的序列 a,每个点为黑或白,每次操作可以将一个长度小于等于 k 的区间涂白或者涂黑,问变成序列 b 的最少操作次数。 n≤5*10^{5}

  • f_{i} 表示前 i 个格子一样的最少操作次数。
  • 枚举 j<=i ,把 [j,i] 全涂成 i 点的颜色,然后再将 [j,i] 区间内的点涂成一样的。后者发现是区间内黑白的段数。
  • 满足决策单调性,单调队列扫一遍

决策单调性

  • 1D/1D问题中,若随i增加,决策点单调,那么具有决策单调性
  • 1D/1D:状态数是O(n),单次决策量是O(n)
  • 对于标准的1D/1D方程F_{j=\min_{0\leqslant i< j}D_{i}}+w_{i,j}\; \; j\in [1,N]
  • 其中D_{i}是关于F_{i}的任意函数
  • 若权函数w满足\forall i,j,w_{i,j}+w_{i+1,j+1}\leqslant w_{i,j+1}+w_{i+1,j},则称其满足凸完全单调性
  • 易证明k>0时,有w_{i,j+k}-w_{i,j}随i单调不降,w_{i+k,j}-w_{i,j}随j单调不降
  • 那么对于\forall 1\leqslant a\leqslant b \leqslant c\leqslant d \leqslant \mathbb{N},
在 Ubuntu 20.04 系统上安装 cuDNN 时,通常会涉及以下几个关键软件包:`libcudnn8`、`libcudnn8-dev` 和 `cudnn-local-repo-ubuntu2004`。这些软件包各自承担不同的功能和作用,适用于不同阶段的使用需求。 ### `libcudnn8` `libcudnn8` 是 cuDNN 的运行时库包,包含了用于深度学习应用的 cuDNN 运行时库文件。这些库文件是构建和运行依赖 cuDNN 的应用程序所必需的。例如,当使用 TensorFlow 或 PyTorch 等深度学习框架时,这些框架会依赖 `libcudnn8` 提供的优化算法来加速卷积运算。在安装完成后,可以通过以下命令检查其版本信息: ```bash dpkg -l | grep libcudnn8 ``` 输出示例: ``` ii libcudnn8 8.9.7.29-1+cuda11.8 amd64 cuDNN runtime libraries ``` 该信息表明系统中已安装的 `libcudnn8` 版本为 8.9.7.29,并且与 CUDA 11.8 兼容[^1]。 ### `libcudnn8-dev` `libcudnn8-dev` 是 cuDNN 的开发库包,包含了头文件、静态库和共享库,适用于开发人员在开发阶段编译和链接 cuDNN 应用程序。这些文件是构建依赖 cuDNN 的应用程序所必需的。例如,在编写自定义的深度学习模型时,开发者需要包含 `cudnn.h` 头文件,并链接 `libcudnn.so` 库文件。可以通过以下命令安装该包: ```bash sudo apt-get install libcudnn8-dev=8.9.7.29-1+cuda11.8 ``` 安装完成后,可以通过以下命令验证其版本信息: ```bash cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2 ``` 输出示例: ```c #define CUDNN_MAJOR 8 #define CUDNN_MINOR 9 #define CUDNN_PATCHLEVEL 7 ``` 上述信息表明当前安装的 `libcudnn8-dev` 版本为 8.9.7,与用户提到的 8.9.7.29 相匹配。 ### `cudnn-local-repo-ubuntu2004` `cudnn-local-repo-ubuntu2004` 是 NVIDIA 提供的本地仓库配置文件包,用于配置系统以支持从本地安装的 cuDNN 仓库中安装软件包。该包通常包含仓库的源列表文件和 GPG 密钥,确保系统能够正确识别和信任本地仓库中的软件包。例如,在安装 cuDNN 时,可以通过以下命令将仓库的 GPG 密钥复制到系统密钥环中: ```bash sudo cp /var/cudnn-local-repo-ubuntu2004-8.9.7.29/cudnn-local-B0FE0A41-keyring.gpg /usr/share/keyrings/ ``` 然后更新软件包列表: ```bash sudo apt-get update ``` 最后安装 cuDNN 的库文件: ```bash sudo apt-get install libcudnn8=8.9.7.29-1+cuda11.8 sudo apt-get install libcudnn8-dev=8.9.7.29-1+cuda11.8 sudo apt-get install libcudnn8-samples=8.9.7.29-1+cuda11.8 ``` 这些步骤确保系统能够正确地从本地仓库中安装 cuDNN 的运行时库和开发库。 ### 卸载 cuDNN 如果需要卸载已安装的 cuDNN 软件包,可以通过以下命令按顺序卸载: ```bash sudo dpkg -r libcudnn8-samples sudo dpkg -r libcudnn8-dev sudo dpkg -r libcudnn8 ``` 此外,还需要卸载 `cudnn-local-repo-ubuntu2004` 包: ```bash sudo apt-get purge cudnn-local-repo-ubuntu2004-8.9.7.29 ``` 最后检查系统中是否还存在 cuDNN 相关的文件: ```bash dpkg -l | grep cudnn ``` 如果没有输出,则表示 cuDNN 已成功卸载[^2]。 ### 相关问 1. 如何在 Ubuntu 20.04 上安装 CUDA 11.8? 2. 如何验证 cuDNN 是否与当前 CUDA 版本兼容? 3. 如何通过源码编译安装 cuDNN? 4. 如何在 Ubuntu 系统中配置环境变量以支持 cuDNN?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值