自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [动态规划] 删除并获得点数

我们知道,如果我们选择了nums[i],那么我们就不能选择nums[i]-1和nums[i]+1,而题目要求我们获得最大点数,所以我们也应当选择所有的与nums[i]相等的那些数,也就是说假如与nums[i]相等的数有x个,那么我们就可以得到x * nums[i]个点数。这样我们创建一个dp数组,dp[i]表示到第i个位置的时候,我们隔位选座(也就是说我们如果选了sum[c],那么我们就不能选它相邻位置的sum[c-1] 和 sum[c+1]) 能够得到的最大点数。之后,删除 2 获得 2 个点数。

2024-09-08 11:03:08 406 1

原创 [矩阵快速幂] 爬楼梯

矩阵的特点是第一行都是dp[i-1]和dp[i-2]前面的系数,也就是{1,1}。对于二阶矩阵而言,就是{{1,1},{1,0}},用这个矩阵乘上矩阵{{f(n)},{f(n-1)}}。也就是说,我们不断递推的话可以得到一个很好看的公式{{f(n+1)},{f(n)}}=({{1,1},{1,0}})^n*{{f(1)},{f(0)}}。我们可以想,如果我们要求一个矩阵A的10次方,我们先把10转换为二进制1010,现在,我们可以进入一个循环,判断条件是n=1010(2)大于0。1. 1 阶 + 1 阶。

2024-09-02 15:21:02 633

原创 [排序和二分] 绝对差值和

我们不妨取出一个局部去观察,首先,对于任意一个位置的i,abs(nums1[i]-nums2[i])就是这个位置对于答案的贡献,如果我们用j位置的数去置换掉i位置(0<=i,j<n,其中n为nums1数组的长度),那么这个位置的贡献就变成了abs(nums1[j]-nums2[i])。其实也比较容易发现,我们只需要让nums1[j]接近nums2[i]即可,也就是说我们二分查找一下nums1数组中和nums2[i]接近的两个数(可能更小,也可能更大),然后比较哪个更小即可。将第一个元素替换为第二个元素:[

2024-08-31 20:59:22 642 1

原创 [BFS广度优先搜索] 迷宫

所以我们想到了一个可以用一个数组记录下来的方法,这个时候我们还要想到其实按照题目所述的做法,我们这样是对称的。为了更加便捷快速,我们可以用一个巧妙的自定义结构体Node创建一个数组,然后记录下我们走过的格子的位置路径,一路保存下来然后最后直接用一个循环去遍历更新即可。最后,我们的输入输出就变简单了,如果是我们已经遍历更新过的位置,那么我们直接输出路径的长度(或者说是遍历的所有格子的数量),如果是我们还没有遍历的位置,我们就调用bfs函数遍历一遍再输出我们的答案即可。现在,有 q 次询问。

2024-08-29 21:22:05 391

原创 [双指针] 接雨水

我们不妨先从左往右看,我们把能够容纳雨水的一块块区域看作一个个木桶,那么这个木桶其实只有两块木板,左边那块和右边这块,而且我们不妨先假定左边这块木板为最短木板的情况,那么我们从左往右遍历柱子,如果遇到比我们假定的最短木板高的木板的情况,说明可以储水了,那么我们开始储水,然后更新我们的最短木板的长度;同理,另一种情况,那就是右边这块木板短的情况,我们从右往左遍历,假定右边的木板短,那么我们遇到更高的木板的时候,就开始储水,然后同理更新我们的更短木板的长度。最后,我们输出我们储水的总量即可。

2024-08-28 21:44:22 404

原创 [动态规划] 电影院选座

这是一道很典型的动态规划题目,我们可以规定一个二维的dp数组,dp[i][j]表示到第i个位置,安排了j个人后座位的最大可能舒适度总和。那么,考虑到“取或不取”的原则,dp[i][j]的第i个座位,我们可以选择安排人坐,那么我们只要在前i-1个位置安排j-1个人即可,如果说我们不安排人坐,那么我们就要在前i-2人位置安排j-1个人(此处i-1个位置已经不能坐人了),所以我们很容易地得到递推公式dp[i][j]=max{dp[i-1][j],dp[i-1][j-1]+confort[i]}。

2024-08-28 20:28:01 466 1

原创 [贪心算法] 助教写代码

由于每分钟每个学生也会自己敲代码,所以实际上影响最终时间的是那个敲代码量最多的同学,所以只要助教每分钟去帮助敲代码量最多的同学即可(注意这个同学会发生改变,因为随着时间的进行,每分钟之后要敲最多代码的那个同学会发生改变)。在程设班里,每个学生每分钟可以自己编写 a 行代码。助教每分钟可以额外帮助一个学生编写 b 行代码(也就是说,该学生每分钟可以编写 a+b 行代码),现在有 n 个学生,第 i 个学生需要编写的代码量为 wi 行,请你求出所有学生完成编写所有代码的最少时间(以一分钟为最小单位)。

2024-08-18 13:36:27 403

原创 [递归和栈] 合并编码

同样的,如果我们遇见了反括号“]”,就减少计数器,同时开始我们的处理。处理的时候,我们弹出数字栈中的数字,也弹出字符串栈中的字符串,创建一个空字符串,然后将字符串栈中弹出的字符串倍长。同时,我们检查字符串栈中是否还有字符串,以及count是否是一个非0数,然后我们在字符串栈中找找是否有同一个括号内的字符串,如果有,我们把它们连接起来,然后作为一个节点放入字符串栈中。接着,输出最终答案的时候,我们看看栈内空不空,如果不为空,我们就一直把栈内的字符串拼接起来,最后返回答案字符串即可。一行,代表原始字符串。

2024-08-16 23:27:57 356

原创 [深度优先搜索] 宝藏收集

接着,我们在dfs中,首先给函数传入一个开始深度优先搜索的起点位置,然后我们设置一个flag作为标记,看看我们当前位置是否还能往下走,如果可以就把flag设置为1,如果不行的话就说明如果我们选择了这条路,那么当前的一个宝藏数量已经达到了最大了(注意在dfs的过程中我们同时也进行了回溯的操作)。0,则表示第 1 个藏宝点至第 2 个藏宝点有路径,至第 3 个藏宝点有路径,至第 4 个、第 5 个 …(4) 以此类推,第 N+1 行有 1 个数,表示第 n-1 个藏宝点至第 n 个藏宝点有无路径连接。

2024-08-15 21:31:33 543

原创 [leetcode] 字母异位词分组

本题我们暂且先用python来解决。首先认真解读题目意思我们可以发现,在同一组的字母异位词中,全部的单词出现的次数是一样的。返回keys中的list[str]即可。是由重新排列源单词的所有字母得到的一个新单词。可以按任意顺序返回结果列表。给你一个字符串数组,请你将。

2024-08-11 18:35:07 456

原创 [动态规划 & 状态压缩] 课程大作业

描述小明是北京大学信息科学技术学院三年级本科生。他喜欢参加各式各样的校园社团。这个学期就要结束了,每个课程大作业的截止时间也快到了,可是小明还没有开始做。每一门课程都有一个课程大作业,每个课程大作业都有截止时间。如果提交时间超过截止时间X天,那么他将会被扣掉X分。对于每个大作业,小明要花费一天或者若干天来完成。他不能同时做多个大作业,只有他完成了当前的项目,才可以开始一个新的项目。小明希望你可以帮助他规划出一个最好的办法(完成大作业的顺序)来减少扣分。输入输入包含若干测试样例。

2024-07-08 13:59:05 1012

原创 [动态规划] Charm Bracelet

描述N(1 ≤NiWi(1 ≤WiDi(1 ≤DiM(1 ≤M≤ 12,880).输入输出样例输入4 61 42 63 122 7样例输出23。

2024-07-08 10:32:56 905

原创 [动态规划] 硬币

描述宇航员Bob有一天来到火星上,他有收集硬币的习惯。于是他将火星上所有面值的硬币都收集起来了,一共有n种,每种只有一个:面值分别为a1,a2… an。Bob在机场看到了一个特别喜欢的礼物,想买来送给朋友Alice,这个礼物的价格是X元。Bob很想知道为了买这个礼物他的哪些硬币是必须被使用的,即Bob必须放弃收集好的哪些硬币种类。飞机场不提供找零,只接受恰好X元。输入第一行包含两个正整数n和x。第二行从小到大为n个正整数a1, a2, a3 … an (1

2024-07-02 12:40:27 501 1

原创 [动态规划] UNIMODAL PALINDROMIC DECOMPOSITIONS

描述1: (1)输入输出样例输入2345678102324131213920样例输出2 23 24 45 36 77 58 1110 1723 10424 19992 331143提示N < 250。

2024-06-28 13:49:00 1133

原创 [广搜BFS] Pots

描述and输入, and≤max().输出’.样例输入3 5 4样例输出6FILL(2)POUR(2,1)DROP(1)POUR(2,1)FILL(2)POUR(2,1)

2024-06-21 10:45:34 908

原创 [状态压缩 & 广搜BFS]Saving Tang Monk

描述输入输出样例输入3 1K.S##11#T3 1K#T.S#1#.3 2K#T.S.21.0 0样例输出5impossible8。

2024-06-21 10:06:36 970

原创 [状态压缩 & 回溯搜索] 海贼王之伟大航路

描述“我是要成为海贼王的男人!”,路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的艰险历程。路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着“唯一的大秘宝”——ONE PIECE)。而航程中间,则是各式各样的岛屿。因为伟大航路上的气候十分异常,所以来往任意两个岛屿之间的时间差别很大,从A岛到B岛可能需要1天,而从B岛到A岛则可能需要1年。当然,任意两个岛之间的航行时间虽然差别很大,但都是已知的。

2024-06-20 22:41:06 1263

原创 [递归回溯DFS]棋盘问题

描述在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。输入输入含有多组测试数据。每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。当为-1 -1时表示输入结束。

2024-06-20 20:07:31 295

原创 [深度优先搜索DFS]迷宫问题

描述定义一个二维数组:它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。输入一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。输出左上角到右下角的最短路径,格式如样例所示。样例输入0 1 0 0 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0样例输出(0, 0)(1, 0)(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)

2024-06-20 18:18:29 437

原创 [动态规划]怪盗基德的滑翔翼

描述怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。不得已,怪盗基德只能操作受损的滑翔翼逃脱。假设城市中一共有N幢建筑排成一条线,每幢建筑的高度各不相同。初始时,怪盗基德可以在任何一幢建筑的顶端。

2024-06-20 17:01:55 541

原创 [贪心算法]忍者道具

描述忍者道具有很多种,苦无,飞镖,震爆弹。L君热衷于收集忍者道具,现在他有N个道具,每个道具的重量分别是C1、C2…CN。现在他想把这N个道具装到载重量为W的工具包里,请问他最少需要多少个工具包?输入第一行包含两个用空格隔开的整数,N和W。接下来N行每行一个整数,其中第i+1行的整数表示第i个道具的重量Ci。输出输出一个整数,最少需要多少个工具包。样例输入5 19961219941229样例输出2提示对于100%的数据,1

2024-06-20 16:32:07 842

原创 [BFS广搜]数字变换

描述给定一个包含5个数字(0-9)的字符串,例如 “02943”,请将“12345”变换到它。你可以采取3种操作进行变换1. 交换相邻的两个数字2. 将一个数字加1。如果加1后大于9,则变为03. 将一个数字加倍。如果加倍后大于9,则将其变为加倍后的结果除以10的余数。最多只能用第2种操作3次,第3种操作2次 求最少经过多少次操作可以完成变换。输入有最多 100,000 组数据每组数据就是包含5个数字的字符串输出对每组数据,输出将"12345"变换到给定字符串所需要的最少操作步数。

2024-06-20 14:04:04 563

原创 [动态规划&位运算]表达式的期望值

描述给定如下表达式:其中Ai(0

2024-06-19 23:17:54 1068

原创 [BFS广搜]迷阵

描述小Z每年都会为程设课出一道大作业,荼毒学弟学妹,可谓罪大恶极不可饶恕。终于有一天,神明也看不下去了,他唤醒上古四大神兽,决定围困小Z,威慑一番。于是,在小Z下一次醒来时,他便发现自己已然身处不知名的所在,抬眼所见,只有滚滚迷雾席卷而来,雾霭深处还隐隐约约闪着雷光。低头一看,地上有一红漆木盒,上书四个大字“求生之道”,打开一看,竟是一台电脑。电脑上空荡荡的,只有三个文件,一个是 Visual Studio 的安装包,一个是 README.txt,还有一个是 map.png。

2024-06-19 16:13:32 528

原创 [双指针]要变多少次

描述0比1小,所以一个串中如果0全在1前面,这个串就比较和谐。对于一个只包含0和1的串,你每次可以将一个0变成1,或者将一个1变成0。那么,最少需要变多少次才能把保证所有的0在1前面呢?输入第一行是一个整数 T,代表测试数据的组数。以下T行每行包含一个01串 S。输出对于每组测试数据输出最少需要修改的次数。样例输入3000111010001100000样例输出011解题分析这题的话,感觉像在数数。

2024-06-19 15:56:44 397

原创 [动态规划] 最佳加法表达式

描述给定n个1到9的数字,要求在数字之间摆放m个加号(加号两边必须有数字),使得所得到的加法表达式的值最小,并输出该值。例如,在1234中摆放1个加号,最好的摆法就是12+34,和为36输入有不超过15组数据每组数据两行。第一行是整数m,表示有m个加号要放( 0

2024-06-19 13:13:05 682

原创 [动态规划] 滑雪

描述Michael喜欢滑雪这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。输入。

2024-06-19 10:41:07 597

原创 [递归与栈]The Sierpinski Fractal

描述/\/__\输入输出样例输入3210样例输出/\/__\/\ /\/__\/__\/\ /\/\/__\/\ /\/__\/__\/\/__\提示。

2024-06-18 23:37:34 551

原创 [递归和栈] 文件结构图

描述在计算机上看到文件系统的结构通常很有用。Microsoft Windows上面的"explorer"程序就是这样的一个例子。但是在有图形界面之前,没有图形化的表示方法的,那时候最好的方式是把目录和文件的结构显示成一个"图"的样子,而且使用缩排的形式来表示目录的结构。比如:ROOT| dir1| dir2| dir3file1file2这个图说明:ROOT目录包括三个子目录和两个文件。第一个子目录包含3个文件,第二个子目录是空的,第三个子目录包含一个文件。

2024-06-18 22:50:15 734

原创 [递归和栈] Boolean Expressions

描述输入输出样例输入!F | F |!V&!F&!(F|F&V))样例输出。

2024-06-18 22:12:49 977

原创 [二分枚举] 河中跳房子

描述每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤L≤ 1,000,000,000) 的终点处均有一个岩石。在起点和终点之间,有N(0 ≤N≤ 50,000) 个岩石,每个岩石与起点的距离分别为Di (0

2024-06-18 10:29:02 524

原创 [二分枚举]派

描述我的生日要到了!根据习俗,我需要将一些派分给大家。我有N个不同口味、不同大小的派。有F个朋友会来参加我的派对,每个人会拿到一块派(必须一个派的一块,不能由几个派的小块拼成;可以是一整个派)。我的朋友们都特别小气,如果有人拿到更大的一块,就会开始抱怨。因此所有人拿到的派是同样大小的(但不需要是同样形状的),虽然这样有些派会被浪费,但总比搞砸整个派对好。当然,我也要给自己留一块,而这一块也要和其他人的同样大小。请问我们每个人拿到的派最大是多少?每个派都是一个高为1,半径不等的圆柱体。输入。

2024-06-18 09:26:52 288

原创 [二分枚举]特殊密码锁

有一种特殊的二进制密码锁,由n个相连的按钮组成(n

2024-06-17 16:16:11 399

原创 [二分枚举]A:拨钟问题

描述有9个时钟,排成一个3*3的矩阵。(图 1)现在需要用最少的移动,将9个时钟的指针都拨到12点的位置。共允许有9种不同的移动。如下表所示,每个移动会将若干个时钟的指针沿顺时针方向拨动90度。移动 影响的时钟输入9个整数,表示各时钟指针的起始位置,相邻两个整数之间用单个空格隔开。其中,0=12点、1=3点、2=6点、3=9点。输出输出一个最短的移动序列,使得9个时钟的指针都指向12点。按照移动的序号从小到大输出结果。相邻两个整数之间用单个空格隔开。样例输入。

2024-06-17 15:42:33 457

原创 [双指针] A-B 数对

出题是一件痛苦的事情!相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!

2024-05-21 09:30:08 366

原创 [动态规划] 数字组合

先介绍一种暴力枚举的方法吧,观察可知全部的情况最多只有2^20,也即1024*1024次,这完全是计算机可以接受的程度,于是我们直接枚举全部情况并且判断即可。输入的第一行是两个正整数n和t,用空格隔开,其中1

2024-05-16 23:16:36 402

原创 [动态规划] 股票买卖

我们可以定义两个数组pre和after,pre[i]表示到第i天我们可以买卖一次股票得到的最大利润,after[i]表示从第i天往后我们可以买卖一次股票得到的最大利润,最后我们再遍历一遍结果取最大值即可。接下来的每组数据,第一行是一个整数 N (1

2024-05-16 21:55:00 250

原创 [动态规划] 计算字符串距离

比如对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加/减少一个“g”的方式来达到目的。无论增加还是减少“g”,我们都仅仅需要一次操作。我们把这个操作所需要的次数定义为两个字符串的距离。给定任意两个字符串,写出一个算法来计算出他们的距离。第一行有一个整数n。表示测试数据的组数,接下来共n行,每行两个字符串,用空格隔开。表示要计算距离的两个字符串字符串长度不超过1000。针对每一组测试数据输出一个整数,值为两个字符串的距离。3ab ab104。

2024-05-16 19:52:46 378

原创 [动态规划] 最大上升子序列和

我们可以遍历前面的a[i],如果a[i]

2024-05-16 15:16:10 417

原创 [动态规划] 完美覆盖

我们先计算一个n=2的时候,这是最小的单元(n=1的时候很明显,不可能被完全覆盖,或者从n必须为偶数理解)。比如n=4的时候,如果我们只是计算3*dp[2],那实际上我们在n=2,3这两列可以横着放多米诺牌。所以我们还需要考虑dp[i-4],即我们空出四列出来,然后计算dp[i-4]*2,然后保持这两列横着放,继续i-=2,因为我们刚刚使用了dp[i-4],这是没有考虑i-4和i-5列横着放并且i-3和i-2列横着放的情况。针对每一行的 n 值,输出 3 乘 n 棋盘的不同的完美覆盖的总数。

2024-05-13 21:48:58 702

空空如也

空空如也

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

TA关注的人

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