- 博客(20)
- 收藏
- 关注
原创 背包问题总结
AcWing 5837. 工作安排首先对已知数据进行预处理,先对截至时间从小到大排序,然后用时从小到大排序f[j]j。注意这里最后答案是取,这是因为对于一个样例:50 50 100 ,100 100 1 可以看到f[50]=100 而f[100] = 1。
2025-05-27 10:44:54
119
原创 LeetCode 157双周赛 (数学+LCA)
此题首先计算树的深度k,那么最长路径的边的个数为k-1,问题就转化为从k-1个位置里面放奇数个位置放1,偶数个位置放2。−1 个数中选了奇数个数,那么不放入我们拿出来的数(一定不选),得到奇数个数。−1 个数中选了偶数个数,那么放入我们拿出来的数(一定选),得到奇数个数。使用该公式即可求得A、B最短路径的边数,然后用快速幂求方案数即可。对于任意两个点A,B,我们记他俩之间最短路径的边数为L。因此本题求完最长路径的边数n=k-1,再用快速幂求得。个不同元素中,选奇数个数,有。−1 个数随便选或不选,有。
2025-05-27 10:42:38
333
1
原创 LeetCode 3362.零数组变换III
2.对于任意下标i将左端点l<=i的询问区间的右端点(因为后续只会用到右端点,左端点信息用sum_d维护)放入大根堆中。应该从左端点下标l=0的区间中,右端点从大到小选x个,这是因为当你区间范围覆盖的范围越广,后续可能再选的区间数就越少。3.当sum_d<nums[i]时意味着当前可以减去的数少了,需要再从询问区间中添加。4.如果当前可以减去的数小于当前数,并且大根堆中没有可以选的了,那么说明没有解。其中sum_d表示的是下标i当前减去的数的大小。1.对询问区间按照左端点进行排序。
2025-05-22 12:56:44
240
原创 有向无环图中合法拓扑排序的最大利润
对于每次状态更新时,对于已经去除的点,将入度依次更新,再选入度为0的点。这样很明显造成了冗余计算,可以用二进制表示。对度的处理优化后的代码。
2025-05-20 10:53:53
201
原创 0-1BFS
如果当前格子是字母格子,那么除了像普通 BFS 那样遍历四方向的相邻格子以外,还需要遍历该字母的所有传送门,传送过去(边权为 0)。使用所有传送门后,清空传送门的位置列表,避免反复使用传送门。如果当前格子是非字母格子,那么像普通 BFS 那样遍历四方向的相邻格子。所有相同字母之间有边权为0的边。所有相邻格子之间有边权为1的边。
2025-05-19 09:56:45
271
原创 与交换有关的结论
3551. 数位和排序需要的最小交换次数 - 力扣(LeetCode)这题是可以任意两个元素交换,那如果是相邻元素呢?求逆序对的方法方法1:归并排序方法2:树状数组对于代码种离散化的解释:
2025-05-19 09:49:38
208
原创 LeetCode 1931.用三种不同颜色为网格涂色
范围内的所有整数,将其转换为长度为 m 的三进制串,再判断其是否满足任意相邻的两个数位均不相同。这题1<=m<=5,1<=n<=1000,因此将m视作行,n视作列。3.由于每一行的状态都是从上一层转移来的,可以用一维表示。经典网格图状态压缩DP,较为简单。每行颜色视作三进制串(012)
2025-05-18 10:26:55
334
原创 卡特兰数
首先思考这样一个问题:给定n个不同的正整数1~n,依次进行出栈入栈操作,出栈的顺序有多少种?对于每个正整数都会入栈一次、出栈一次,我们将入栈记为+1,出栈记为-1,会得到如下的序列:+1,-1,+1,+1,....,+1,-1,记总和为total,因为每个元素只会分别入栈出栈各一次,所以total=0又因为栈中的元素个数不可能为负数,由此可以得到这个序列的所有前缀和均大于等于0我们记其中一个前缀+1的个数为y,-1的个数为x,会得到y-x>=0,即y>=x,其中1<=x<=n,1<=y<=n。
2025-04-08 23:57:44
1498
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅