7.29-7.30集训——dp优化

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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},
<think>好的,我现在需要帮助用户解决如何查看已安装的cuDNN版本及其详细信息的问。根据用户提供的引用内容,特别是引用[4]提到的方法,用户可能已经尝试过一些指令但遇到了问。首先,我要确认用户的环境,比如是否使用Ubuntu系统,因为引用中提到了dpkg和相关的路径。 用户的问有两个部分:一是使用dpkg -l cudnn查看已安装版本,二是获取详细信息。根据我的知识,cuDNN通常通过.deb包或tar文件安装。如果使用.deb安装,dpkg可以列出相关的包,但包名可能不是简的“cudnn”,可能包含版本号或其他标识符。例如,libcudnn8、libcudnn8-dev等。因此,用户运行dpkg -l | grep cudnn会更全面,这样可以列出所有包含cudnn的包及其版本。 接下来,用户可能需要更详细的信息,比如具体的版本号。引用[4]提到新指令是检查cudnn_version.h文件,而旧指令检查cudnn.h。所以需要指导用户使用正确的命令,例如cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2。如果这个文件不存在,可能需要检查安装路径是否正确,或者是否通过tar文件安装,此时dpkg可能无法显示信息,用户需要手动检查文件。 另外,用户可能遇到版本文件路径变化的问,比如从cudnn.h转移到cudnn_version.h,这可能导致旧指令失效。需要提醒用户这一点,并建议同时检查两个文件以确保找到正确的版本信息。 最后,用户可能需要验证cuDNN的功能,比如运行样例代码或使用nvidia提供的测试工具。这部分可以作为补充建议,确保安装的cuDNN不仅版本正确,还能正常工作。</think>要查看已安装的cuDNN版本及详细信息,请按以下步骤操作: ### 一、通过deb包安装的版本查询 1. **列出所有cudnn相关安装包** ```bash dpkg -l | grep cudnn ``` 输出示例: ``` ii libcudnn8 8.9.7.1-1+cuda11.8 amd64 cuDNN runtime libraries ii libcudnn8-dev 8.9.7.1-1+cuda11.8 amd64 cuDNN development files ``` 其中`8.9.7.1`表示主版本号,`cuda11.8`表示对应的CUDA版本[^4] 2. **查看具体包信息** ```bash dpkg -s libcudnn8 # 查看运行时库信息 dpkg -s libcudnn8-dev # 查看开发包信息 ``` ### 二、通过头文件验证版本 若通过tar压缩包安装或需要双重验证: ```bash cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 ``` 输出示例: ``` #define CUDNN_MAJOR 8 #define CUDNN_MINOR 9 #define CUDNN_PATCHLEVEL 7 -- #define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL) ``` 表示安装的是**cuDNN 8.9.7**[^4] ### 三、验证组件完整性 1. **检查关键文件路径** ```bash ls -l /usr/local/cuda/lib64/libcudnn* # 查看动态库文件 ls -l /usr/local/cuda/include/cudnn* # 查看头文件 ``` 2. **运行验证测试(需安装样例)** ```bash cp -r /usr/src/cudnn_samples_v8/ $HOME cd $HOME/cudnn_samples_v8/mnistCUDNN make clean && make ./mnistCUDNN ``` 若输出`Test passed!`则表示功能正常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值