动态规划

什么是动态规划?

谈到动态规划,很多人会疑惑动态规划难吗?说实话很难,特别是对于初学者来说,入门动态规划的时候,举个例子,看0-1背包问题,很容易就被题目弄懵了。就算看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手。对于动态规划,

什么是哈希?

从原理到应用分析什么是哈希?一、什么是哈希?哈希(hash):将任意长度的输入(关键字),通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值,通常哈希值代表了关键字的存储位置。但是为什么要这样做呢?或者说,

超详细背包DP九讲(算法分析+问题分析+代码分析)

P01:01背包问题题目:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路:这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。

什么是线性DP?

一、什么是线性?越是基础的概念,越应该有一个透彻的理解,才能对上层问题有直接了当的理解。比如对线性分割器,你对线性有透彻的理解,一看这个名字就大概知道它是怎么回事了。1.几何理解:线性关系就是直线关系现在你可以想象一条曲线S,它可以是直的也可以是弯的,

DP优化(三)四边形不等式优化实例讲解

有一种DP可以写成四边形不等式,那么可以用一个优化来优化这种DP(一般是二维的,不加优化是O(n3))。如果a≤b≤c≤d,那么如果DP式子满足f(a,c)+f(b,d)≤f(b,c)+f(a,d),那么这就是一个四边形不等式。一、首先先看一道例题题目:有一群人要乘船,

线性DP图文实例讲解

线性DP,所谓线性DP,就是指我们的递归方程有一个明显的线性关系的,有可能是一维线性的,也可能是二维线性的。例题一:大盗阿福题目:阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有NN家店铺,每家店中都有一些现金。

记忆化搜索实例讲解

什么是记忆化搜索?记忆化搜索在本质上,还是动态规划,只是实现方式采用了深度优先搜索的形式,但是它不像深度优先搜索那样重复枚举所有情况,而是把已经计算的子问题保存下来,这样就和动态规划的思想不谋而合了。本篇文章会通过最简单的例子对记忆化搜索进行深入讲解,帮助大家学会什么是记忆化搜索。

什么是状态压缩DP?

状态压缩DP一般是基于二进制进行的。状态压缩DP一般分为两类:①基于连通性DP(棋盘式)②集合式(表示每一个元素是否在集合中)一、概述1.状态压缩状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。

状态压缩DP图文实例讲解(二)

本文是讲解状态压缩DP的第二部分,仍然是对基于连通性问题的探讨与学习。一些概念性的问题,以及基本解法在第一节中讲过,这里就不再赘述。对典例蒙德里安的梦想的分析直接看例题:求把N×M的棋盘分割成若干个1×2的长方形,有多少种方案。例如当N=2,M=4时,共有5种方案。

DP优化(二)斜率优化实例讲解

有一类DP状态方程,例如:dp[i]=min{dp[j]−a[i]∗d[j]}  0≤j<i,d[j]≤d[j+1],a[i]≤a[i+1]它的特征是存在一个既有i又有j的项a[i]∗d[j]。编程时,如果简单地对i和j循环,复杂度是O(n2)的。