- 博客(30)
- 收藏
- 关注
原创 积木城堡-DP
小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度。为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执。为了使他的城堡更雄伟,他觉得应该使最后的城堡都尽可能的高。城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木。小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒。请你帮助小XC编一个程序,根据他垒的所有城堡的信息,决定应该移去哪些积木才能获得最佳的效果。
2025-11-15 12:39:26
328
原创 晴天小猪历险记之Hill---Dijkstra算法
时间限制 1000 ms内存限制 128 MB 这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在。但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助。 山用一个三角形表示,从山顶依次向下有1段、2段、3段等山路,每一段用一个数字T(1< =T< =100)表示,代表晴天小猪在这一段山路上需要爬的时间,每一次它都可以朝左、右、左上、右上四个方向走(注意:在任意一层的第一段也可以走到本层的最后一段或上一层的最后一
2025-11-01 22:27:02
368
原创 气球游戏(DP,分治)
摘要:本文介绍了一个戳气球游戏的最优解问题。游戏规则是戳破所有气球,每次戳破气球i可获得nums[left]*nums[i]*nums[right]积分,戳破后相邻关系会改变。核心挑战在于传统贪心算法无法保证全局最优解。解决方案采用动态规划,通过逆向思维固定最后戳破的气球,并预处理添加虚拟气球简化边界条件。状态转移方程为DP[i][j] = max(DP[i][k] + DP[k][j] + A[i]*A[k]*A[j]),按区间长度从小到大计算。算法时间复杂度O(n³),空间复杂度O(n²)。
2025-10-19 22:11:07
921
1
原创 整数的幂次方表示
题目要求将正整数n表示为2的幂次方连加的形式,其中指数也要递归分解为相同的表示方式。例如137=2(7)+2(3)+2(0),再继续分解7和3。解法采用递归思路:将n转换为二进制,对每个为1的位,若指数为0或1则直接输出"2(0)"或"2",否则递归处理指数。最后用"+"连接各部分。该算法通过分治思想将大问题分解为小问题逐步求解,适用于n≤2×10^4的范围。输入1315时输出如样例所示的复合表达式。
2025-10-18 11:24:48
303
原创 力扣658.找到K个最接近的元素
【摘要】LeetCode 658题要求在已排序数组arr中,找到最接近x的k个元素并升序返回。使用双指针法,初始化左右指针分别指向数组首尾,通过比较左右元素与x的距离逐步缩小窗口至k大小,最终返回该窗口内的子数组。例如arr=[1,2,3,4,5],k=4,x=3时输出[1,2,3,4]。算法时间复杂度O(n),空间复杂度O(1)。
2025-09-14 17:11:39
150
原创 力扣1358.包含所有三种字符的子字符串数目
【摘要】LeetCode 1358题要求统计字符串s中包含至少一个a、b、c的子字符串数目。采用滑动窗口算法:维护一个恰好不满足条件的窗口[left,right],则所有以right结尾且起始位置在left之前的子串都满足条件。具体实现时,右指针遍历字符串,左指针在满足条件时右移,每次将左指针位置累加到结果中。时间复杂度O(n),空间复杂度O(1)。
2025-09-12 09:47:32
235
原创 B. And It‘s Non-Zero
位运算之前没怎么写过,所以不会写。留一份题解,作为复习使用。题解:按位与的结果不为0,则至少有一列全为1.要求删除的数最少,即要求该列原本含有的1最多。则统计每一位的1的个数,找出个数最大值,用数组数字的总数,减去1的个数,即需要删除的个数。第一版写的是枚举每一个数,对每一个数的每一位用&(1<<j)判断是不是1,用一个数组来统计每一位的结果。然而是TLE...第二版,借助AI工具,发现了从0开始到某一位的数据的二进制排列规律,用前缀和求解可得。
2025-04-26 16:09:34
272
原创 喜欢我们的海绵宝宝吗?--《计算机图形学》实践
本程序实现了一个带有纹理贴图和动态光照效果的3D四面体渲染系统。四面体会在场景中沿轨道公转并自转,用户可以通过键盘控制摄像机视角和调整光照参数。程序基于OpenGL和GLUT框架,实现了完整的3D图形渲染管线。,中文版,对新手极其友好。屏幕录制 2025-04-13 141419。程序设计说明:3D四面体渲染与光照系统。需要源码,可以留下评论~源码暂不开源,推荐去。
2025-04-13 14:34:03
811
原创 P3166 [CQOI2014] 数三角形
思路是很简单的,在所有点中任选3个,减去共线的三种情况,即横,竖,斜,剩下的就可以构成三角形了。那么总点数是(n+1)*(m+1),选3,是组合数,这里按照公式直接求组合数。横的共线:有m+1排横线,每个横线的总点数选3(组合数)即为共线情况。最后别忘了对角线的对称性,最后算出来的斜线需要乘以2~这个公式,看看是否有重复计算,以及如何正确理解它。计算的都是不同步长的斜线,所以。竖的共线:同横线,直接给出公式。取 i=2,j=1,步长为。取 i=2,j=2,步长为。
2025-03-02 12:09:00
838
原创 P3811 【模板】模意义下的乘法逆元
第一版代码用费马小定理求逆,时间复杂度(nlogn)出现TLE的测试点。第二版,线性方法求逆,具体公式推导看这里。
2025-03-01 20:05:01
202
原创 P2401 不等数列
题解参考来源洛谷思路:常规解法涉及阶乘的计算,显然这个复杂度是我们不想要的。对于n个数,有k个小于号,不妨试一下递推,即用动态规划来解决这个问题,定义状态dp[i][j]表示前i个数的排列中,恰好有j个的排列数量。。
2025-03-01 18:54:16
359
原创 C. Infected Tree
说一个错误的解法,也是我一开始的写法----贪心做法。乍一看,感觉贪心思路没什么问题。但是我们如果注意到这里是一棵二叉树,就要考虑到二叉树只有一个儿子的情况。只有一个儿子的情况,,我们可以选择删除这个单个儿子,防止下方感染。也就是说不是每一次都选择节点数最多的分支进行保留。这里不禁想起课上学长们说过的,贪心是局部最优,但不是全局最优。官方题解给出了dp解法,即树形dp。自底向上地选择保留节点最多的分支,直到根节点,得到最终的答案。参考官方题解,采用DP解法。
2025-02-15 21:06:23
217
原创 C. Ehab and Path-etic MEXs
那么解决方案就是,在一个度大于等于3的节点,把0,1,2的标签分别分给这个节点的边。这就使得经过这个节点时,可选的路径里,不会同时出现0,1,2。自己写了很多次,基本上就卡在不知道如何处理这个答案,导致的MLE这里参考了我前面提到的链接,是我看到最为简洁的解决代码了。2、路径经过这个节点,那么所有经过这个节点的路径得到的未出现的最小值有0,1,2。0即经过1和2的边,1即经过0和2的边,2即经过0和1的边。显然,不论我们如何放置标签,总会有一条路径经过权重为0和1的边,那么最大值中的最小值至少为2。
2025-02-14 12:54:15
243
原创 P2016 战略游戏
这里,题目已经说明,结点编号为从0到n-1,那么我们可以把0结点当成根结点,用dfs自底向上推导,根结点的两个最优解的最小值即为答案。dp[u][0]表示不选择该父结点的最优解,则子结点必选。这里用u表示父结点,用v表示子结点。
2025-02-08 19:55:06
313
原创 P1352 没有上司的舞会
dp[u][0]+=max(dp[v][0],dp[v][1]) //不选择当前结点,则子结点可选可不选。dp[u][1]+=dp[v][0] //选择当前结点,则不选择子结点。注意这个题目,没有说明根结点,我们需要找到根结点。所谓根结点,即没有父结点的结点。对于这里的dp递推公式,结合题目可以得到,这里用u表示父结点,用v表示子结点。
2025-02-07 22:03:22
236
原创 P2127序列排序
最小代价,并不一定是次数越少越好,最小代价的还需要考虑被交换的两个数的大小。当然,交换次数最少,交换的数值最小,肯定是一个理想的最小代价。当二者不能同时满足的时候,我们的就要分类考虑,分别求得满足上述两种情况之一的最小代价,选择最小值即可。此时元素7在位置2,和刚刚的步骤一样,将元素7与最终位置在2的元素交换位置,一直重复这样的操作直到元素7回到它应该在的位置。因为快速排序算法交换的次数在我的认识里,是相对比较少的一个排序算法。这里,我们可以对数组的下标进行操作,来体会这个交换的本质。
2025-02-07 15:30:03
415
原创 P1090【NOIP2004 提高组】合并果子-洛谷
写了一个很朴素的思路,每次都取最小的两堆来合并,把合并的结果,作为新的堆,重新再选最小的两堆合并,n堆,需要合并n-1次,每次合成之后都用sort排序,显然复杂度已经达到O(n2log2n),超时是必然的。当然,我们还可以手搓一个堆排序来实现我们刚才的思路。略显麻烦,但作为知识的补充或是复习,还是可以看看的。思路是不变的,重要的是怎么实现;它的底层逻辑是堆排序,时间复杂度是O(log2n),那么下面的实现时间复杂度就是O(nlog2n).留一个TLE代码,以做提醒。因为这个时候的我没了解过优先队列,,,
2025-01-29 13:56:31
149
原创 P1106删数问题
链接我也放到文章的前头咯~简单来说,遇到高峰,即遇到一个数字,它比左右两边的数都大,或者比右边的数大(特指的是第一个数字),那就删去即可。(这里的erase函数确实是一个很棒的函数)其实这里是一个更妙的方法,来找到了一个最小值。个数字,在前k个数字里找到一个最小的数字,那么这个数字前的数字都可以删去了(这个删去的原因应该很明显吧,欲求的答案是最小的数,那答案的第一个数肯定是越小越好)。一般思路:要想得到的数最小,一个很自然的想法,就是把大数字,且位置靠前的数字删去。返回值是一个布尔值,表示是否删除成功。
2025-01-26 15:24:01
1481
原创 D. Olya and Energy Drinks
直到每一个可到达的位置的最小距离都更新完毕以后,直接输出终点的位置的最短距离以后就可以啦~关于bfs的模板,似乎在每一次出栈都会把出栈的结点的vis置为0,这里略去了,依然没有影响结果,可能会在其他题目有影响,这里留一个小疑惑,以后再说。时间的处理,这里参考了我附在前文的链接的做法。因为刚刚已经说过了,不一定每一步都走k米,但每走一步就会花一秒钟。,要看这段距离中是否有障碍,如果有障碍的话,跨过的距离就应当小于k,或者就不能往这个方向走。注意,这里的一步,是指选择上下左右四个方向中的一个方向来走一步,
2025-01-23 23:01:56
1471
原创 P1144最短路径计数
共 N 行,每行一个非负整数,第 i 行输出从顶点 1 到顶点 i 有多少条不同的最短路,由于答案有可能会很大,你只需要输出 ans \bmod 100003$ 后的结果即可。1 到 5 的最短路有 4 条,分别为 2 条 1-> 2-> 4-> 5 和 2 条 1-> 3-> 4-> 5(由于 4-> 5 的边有 2 条)。问从顶点 $1$ 开始,到其他每个点的最短路有几条。邻接矩阵不能处理重边的情况,这里用vector<int>来替换,对于每条边的输入,直接用push_back追加到每个顶点的尾部。
2025-01-22 22:49:47
401
原创 数字系统实验循环显示学号
对于计数器的每个状态,表示一位学号.假设学号是22351234,0000 状态对应2,0001状态对应2,0010对应3,以此类推。将学号每一位都转换成二进制码,这样,输入是八个连续的状态,每一个状态对应一个输出,用卡诺图求得输出的函数表达式,用逻辑器件实现该逻辑表达式。74LS161D计数器为实现模八计数器,在输出段有0111出现时,重新预置数为0;具体的原理,把他们当成一个整体,对于每一个状态到来时,让对应输出为1就行。思路:计数器实现循环,译码器和数码管实现学号输出。方法二:简单,需要一点技巧。
2024-12-02 20:20:09
650
原创 Largest Rectangle in Histogram(直方图求最大矩形面积)
【代码】Largest Rectangle in Histogram(直方图求最大矩形面积)
2024-11-16 19:28:39
394
原创 数字系统实验
一、涉及知识点:简单来说,采样频率为时钟频率的2倍,能呈现出较好的波形。(时钟源100Hz)(调整时钟频率为200Hz,即信号的2倍)~1CLR(clear端,清0)~1PR(不需要异步清零功能,都接高电平,即不需要时候置为1,通常都置为1)
2024-11-07 09:52:51
1732
原创 1958. 三体·Round - 智子(Easy Version)
【代码】1958. 三体·Round - 智子(Easy Version)
2024-10-06 15:22:05
173
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅