自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 排序算法——归并与快速排序

排序算法有不少种,但最省时间复杂度的有归并排序和快速排序。

2023-08-15 18:34:00 68 1

原创 数论——最大公因数

最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个a,b的最大公约数记为(a,b)

2023-08-14 23:25:03 185

原创 Dijkstra最短路算法

一、引言图论中经常出现找最短路问题有一种贪心算法可以找到最短路,这就是Dijkstra算法二、思想Dijkstra有一个优点,就是在正边权连通图中可以保证找到最短路,且时间复杂度为O(n*n)代码整体逻辑:先建立一个数组,表示起点到这个点的最短距离,并将除自己到自己以外的所有值都设为0x3f3f3f3f,先找到离起点最近的点,然后用这个点去更新其他所有点。

2023-08-11 09:42:28 95 1

原创 完全背包——时间+空间双优化

完全背包,即所有物品都无限制数量的拿取,则可以使用三层循环,而三层循环的大样例基本都会爆时间,那么应该怎么省时间呢?我们通过列举一件物品的每一个数量可以发现每次的都是在两边添加w[i]朴素完全背包可以使用三层循环,最后一层循环即为每件物品的数量。再将其优化成一维滚动数组,就完成了时间与空间的双优化。但是能不能像01背包一样用二层循环呢?

2023-08-11 08:43:44 101 1

原创 01背包——滚动数组优化

但是,如果从前往后去更新数组,dp[j - v[ i ]]肯定不比dp[ j ]的值大,而改了前面,后面的更新就会用到前面更新的数据,而本来应该使用原二维数组 i - 1行的数据,也就是更新数据之前的,因此,我们可以巧妙地从后往前遍历,这样就可以避免用到更新后的数据,如果非要从前往后遍历,可以使用一个temp数组存储上一行的数据。那么即可得出dp[ j ] = max(dp[ j ] , dp[j - v[ i ]] + w[ i ])背包滚动数组代码如下。

2023-08-11 08:19:11 127 1

原创 01背包朴素空间解法

首先用一个双层循环,i 用于循环物品, j 用于循环背包容量,当 j < v[i] 时(当这件物品装不下时,那肯定不选这件物品,所以就等于不选这件物品时的最大价值,即dp[ i ][ j ] = dp[ i - 1][ j ] )举一个采药原题的输入输出样例的例子,有70容量的背包,有3件物品,分别是:需要71容量、100价值的物品A,需要69容量、1价值的物品B,需要1容量、2价值的物品C。01背包,0与1分别代表一件物品不选与选,不选或选就提供了两种路,就可以用动态规划来解决。

2023-08-11 08:02:27 60 1

原创 洛谷——[P2039 放苹果] 题解

没有空盘子的方案(dp[m][n])就相当于总苹果数上减去相应盘子数后得到的数为dp的首索引,以其为首索引,原盘子数为次索引,很抽象,写为dp[m][n-m],就相当于在dp[m][n-m]的基础上在每个盘子上都添加了一个苹果。可以发现:当盘子数多于苹果数时,其方案数就等于苹果数个盘子,苹果数个苹果(苹果数量不变)时的方案数相同,即为:dp[m][n] = dp[n][n]假设有m个盘子和n个苹果,dp数组储存方案数,dp[m][n]表示m个盘子n个苹果的方案数。1≤m,n≤10 啊?

2023-08-05 23:20:56 194 1

原创 洛谷题目:——[NOIP1999 普及组] Cantor 表 题解

NOIP1999 普及组] Cantor 表。

2023-08-03 22:38:48 181

原创 最短路——BFS与数组模拟单链表

接下来 m 行,每行包含两个整数 a 和 b,表示存在一条从 a 走到 b 的长度为 1 的边。需要用到多个数组n,ne,h,dist,这些数组分别存储边到达的节点编号、该元素下一个元素的。acwing上的题目为每条长度恒等于1且求1到n号节点的最短路,所以没有用w数组表示边的长度。请你求出 1 号点到 n 号点的最短距离,如果从 1 号点无法走到 n 号点,输出 −1。这里我们用到头插法,将新增节点插入祖宗节点的下一节点(后继节点的第一个节点)编号、每个节点的祖宗节点(头节点)、1号点到这个点的距离.

2023-07-29 22:41:23 96

原创 快速幂——二进制

众所周知,任何一个正整数都可以用不同的二进制数来表示,而二进制中每一位的前一位都是该位的两倍,则我们可以减少运算次数。则我们可以用2*2算出2^2接着用(2^2)*(2^2)算出2^4。快速幂是一种快速进行幂运算的算法,顾名思义,快速幂就是快速算底数的n次幂,时间复杂度。因为幂算完后值往往会很大,所以题经常会让模上一个很大的质数,类似于1e9+7这种。最后将2^8与2^2相乘,即可得出2^10。接着用(2^4)*(2^4)算出2^8。下面是快速幂(这道题的题解)的代码。n),比O(n)要快不少.

2023-07-29 22:07:29 174 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除