摘要:
点乘 一个向量在另一个向量上的投影长度,标量,用于判断角度 叉乘 垂直两向量的平面,右手定则,矢量,用于判断方向 参考博客:点击进入 (1)快速排斥试验 设以线段 P1P2 为对角线的矩形为R, 设以线段 Q1Q2 为对角线的矩形为T,如果R和T不相交,显然两线段不会相交。 (2)跨立试验 如果两线 阅读全文
摘要:
0-1背包 问题描述: 有n个重量和价值分别是wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有方案中价值总和的最大值 分析: dp[ i ][ j ] 表示在前 i 个物品中能装入容量为 j 的背包的最大价值,则有: 当前背包容量不允许装入第 i 件物品时,前 i 件和前 i-1 件 阅读全文
摘要:
Prim算法 构造过程: 1)任选一个点,以这个点开始,寻找该点可以访问的所有的边; 2)在可以访问的所有边中找到最小边,这个边必须有一个点还没有访问过(防止出现回路),将还没有访问的点加入集合,并记录添加的边;(加点法) 3)寻找当前集合可以访问的所有边,重复2过程,直到没有新的点可以加入,即成功 阅读全文
摘要:
先贴一个模板代码: 个人理解: 几个关键点,首先是 lowbit(i) :指 i 的二进制表示中最低位1及其后续的0组成的数字大小。例如,lowbit(6)中6的二进制表示为110,其最低位1及其后续0组成的二进制数字为10,即十进制的2,所以lowbit(6) = 2。接着是查询和更新操作中,各个 阅读全文
摘要:
思路: 明显的可以想到,状态转移方程为: 当x[i] == y[j]时,dp[i][j] = dp[i-1][j-1]+1 当x[i] != y[j]时,dp[i][j] = max(dp[i-1][j], dp[i][j-1]) 这种方法可以结合下面的决策矩阵和代码加深理解(参考自https:// 阅读全文
摘要:
方法一:O(n2)的dp 状态定义:dp[i] 表示以数 a[i] 结尾的 LIS 值 状态转移方程:dp[i] = max(dp[j] + 1, dp[i]) 1 <= j < i && a[i] > a[j] 代码: 方法二:O(nlogn)的贪心+二分 引入一个数组,暂且命名为 low[] , 阅读全文
摘要:
问题描述: 给一个有n个顶点的凸多边形,有很多方法进行三角剖分(polygon triangulation) 。给每个三角形规定一个权函数w(i,j,k)(比如三角形的周长或者三顶点的权和或者三角形的面积等等),求让所有三角形权和最大的方案。 分析: 这个问题的关键在于状态的定义,因为如果允许随意切 阅读全文
摘要:
问题描述: 一个n×m矩阵由n行m列共n×m个数排列而成。两个矩阵A和B可 以相乘当且仅当A的列数等于B的行数。一个n×m的矩阵乘以一个m×p的矩阵等于 一个n×p的矩阵,运算量为m×n×p。矩阵乘法不满足分配律,但满足结合律,因此A×B×C可以按顺序(A×B)×C进行也可以按A×(B×C)来进行。 阅读全文
摘要:
先看几类数字三角形的问题,通过对这几个问题的分析来理解有关动态规划的基本思想 数字三角形I 问题描述: 有一个由正整数组成的三角形,第一行只有一个数,除了最下行之外 每个数的左下方和右下方各有一个数,从第一行的数开始,每次可以往左下或右下走一格,直到走到三角形底端,把沿途经过的数全部加起来作为得分。 阅读全文
摘要:
堆: 每个结点的值都大于或等于其左右孩子结点的值,这样的完全二叉树称为大顶堆;同理,每个结点的值都小于或等于其左右孩子结点的值,这样的完全二叉树称为小顶堆。 思路: 1.将初始序列按照实际需求构造成大顶堆或小顶堆(一般升序大顶堆,降序小顶堆); 2.将顶堆元素与末尾的元素交换,使最大的数排在数组的末 阅读全文