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?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值