随笔分类 - C++
摘要:背包问题 1 01背包和完全背包问题 01背包问题 有N件物品和一个容量为V的背包,第i件物品的体积是v[i]、价值是w[i],每种物品只可以使用一次,求将哪些物品放入背包可以使得价值总和最大。这里的w是weight即权重的意思 这是最基础的背包问题,"01"就是指每种物品要么选要么不选,我们定义状
阅读全文
摘要:线性DP的力扣题目练习 这一章将会介绍线性动态规划的相关概念和经典问题,并给出一些练习题供大家演练。 用动态规划解决问题的过程有以下几个关键点:状态定义,状态的转移,初始化和边界条件。 状态定义 就是定义子问题,如何表示目标规模的问题和更小规模的问题。例如常见的方法:定义状态 dp[n],表示规模为
阅读全文
摘要:线性模型与区间DP 1 线性模型 基本概念 这里的线性是指状态的排布是线性的 线性模型是动态规划中最常用的模型 一般的代码模型是: for(int i = 0; i < n; i++) { for(j = 0; j < i; j++) { // Todo: 更新dp的具体逻辑 } } 最典型的一个例
阅读全文
摘要:动态规划简介 1 动态规划的基本概念 阶段、状态、决策、策略、状态转移方程 1) 阶段和阶段变量 将问题的全过程恰当地分成若干个相互联系的阶段闫氏DP分析法:对应f[i][j]的ij遍历时形成的所有f[i][j] 阶段的划分一般根据时间和空间的自然特征去划分 阶段的划分便于把问题转化成多阶段决策问题
阅读全文
摘要:2023-04-29 动态规划介绍 动态规划是运筹学课程的一部分 多阶段决策问题 有一类活动的过程,可以分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果 当然,每个阶段的决策的选取不是任意确定的,它依赖于当前的状态,又会影响以后的发展 如下图,①、②...n这
阅读全文
摘要:常见的排序算法总结 参考博文常见的排序算法——常见的10种排序 常见算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时
阅读全文
