上一页 1 ··· 3 4 5 6 7 8 9 下一页
摘要: 模板题 我写不明白我要用其他人的学习笔记 这个 其实也没法写,真要一步步写很复杂。 无非就是依次将每个数减掉系数,最后成为一个单位矩阵。 所以看注释: #include<bits/stdc++.h> using namespace std; #define ll long long const in 阅读全文
posted @ 2024-09-10 11:18 sad_lin 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 学习笔记 最大M子段和 V1 \(N\) 个整数组成的序列 \(a[1],a[2],a[3],…,a[n]\),将这N个数划分为互不相交的 \(M\) 个子段,并且这 \(M\) 个子段的和是最大的。如果 \(M >= N\) 个数中正数的个数,那么输出所有正数的和。\(N,M<=5000\)。 例 阅读全文
posted @ 2024-09-10 09:16 sad_lin 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 51nod 1254 最大子段和 V2 #include <bits/stdc++.h> using namespace std; #define ll long long int n; ll a[50005]; ll sum[50005]; ll lmax[50005],rmax[50005]; 阅读全文
posted @ 2024-09-10 06:36 sad_lin 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 51nod 1051 最大子矩阵和 可以用前缀和容斥优化到 \(O(n^4)\),但是不够进行如下图操作: 将每一列的数值都压缩到一维的数组上,就转换为求最大字段和问题,时间复杂度 \(O(n^3)\)。 看看代码就知道了。 #include <bits/stdc++.h> using namesp 阅读全文
posted @ 2024-09-09 20:08 sad_lin 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 51nod 1243 排船的问题 求最长绳子最短,考虑二分答案,判断时我们优先向左放,看是否能全放下。 #include <bits/stdc++.h> using namespace std; #define ll long long int n,x,m; int pos[50005]; int 阅读全文
posted @ 2024-09-09 18:59 sad_lin 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 51nod 1020 逆序排列 学习笔记 其实要预处理,但唐的我非要每次都求一遍。 设状态为 \(dp[i][j]\) 选了 i 个数逆序对数为 j 的排序种类数。 首先初始化 \(dp[i][0]=1\) 即没有逆序对,转移方程 \(dp[i][j]=dp[i-1][j]+dp[i-1][j-1] 阅读全文
posted @ 2024-09-09 16:00 sad_lin 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 题目链接 学习链接 设状态 \(dp[i][j]\) 表示整数 \([1,i]\) 满足要求的排列中,最后一个数选 \(j\) 的排列数。 开一个数组记录他的状态: 把前面已选好的序列中大于等于 \(j\) 的数都加一后再把 \(j\) 加到后面。 #include <bits/stdc++.h> 阅读全文
posted @ 2024-09-09 14:45 sad_lin 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 51nod 1050 循环数组最大子段和 虽然是板子题,两种做法,我们先写一种,另一个咕咕。 因为是循环,所以分为两种,中间的和两边的,中间的直接dp求最大,两边的转化一下就是总的数字和减去中间的最小数字和。 #include <bits/stdc++.h> using namespace std; 阅读全文
posted @ 2024-09-09 10:37 sad_lin 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 1202 子序列个数 设 \(dp[i]\) 为第i个数不同子序列个数,先不考虑重复的情况,每个数只有选不选,转移方程为 \(dp[i]=dp[i-1]\times 2\),但现在我们要求的是不同的子序列个数,因此要减去重复的子序列个数。对于选取了 \(a_i\) 的子序列,会出现重复的序列一定是以 阅读全文
posted @ 2024-09-09 07:57 sad_lin 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 因为边权递增,按最小生成树的顺序 dp,设状态 \(dp[i]\) 为 \(i\) 点的最长路径长度,但是需要单调递增,所以考虑可以同时更新(先将原dp数组储存下来,再用新数组的值更新原 dp 数组),答案为 \(max(dp[i])\)。 #include<bits/stdc++.h> using 阅读全文
posted @ 2024-09-09 07:12 sad_lin 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 3188 字符王国 建图,有环输出-1,无环按照拓扑序dp,设状态为 \(dp[i][j]\) 第 \(i\) 个点,\(j\) 的字符的出现的最大次数,最后遍历每个点找到最大答案。 #include<bits/stdc++.h> using namespace std; #define ll lo 阅读全文
posted @ 2024-09-09 06:29 sad_lin 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 51nod 1791 原题链接 因为在括号串固定的情况下,括号的匹配是固定不变的。所以对左括号进行匹配,p[i]表示与i这个括号相匹配的括号的位置,易得到dp方程 ans[i]=ans[p[i]+1]+1,然后再从后先前一遍求和即可。 #include<bits/stdc++.h> using na 阅读全文
posted @ 2024-09-08 20:34 sad_lin 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 51nod 1201 整数划分 设状态 \(dp[i][j]\) 为和为 \(i\) 时,选择的最大值为 \(j\) 的方案数,所以有转移方程 \(dp[i][j]=dp[i-j][j-1]+dp[i][j-1]\) 有点坑,先枚举 \(j\) 后枚举 \(i\)。 复杂度为 \(O(n^2)\)。 阅读全文
posted @ 2024-09-08 18:20 sad_lin 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 可以发现步数限制把数轴变为了环。环之间不可以交换,环内相邻两点可以交换,然后我们只需要对每个环操作,最后累加。 对于环上的每个石子堆,我们需要将其石子数调整到均值 \(avg\)。因此,我们首先计算每个堆石子相对于 \(avg\) 的偏差,即 \(nowa[i] - avg\)。 因为相邻节点不一定 阅读全文
posted @ 2024-09-08 16:59 sad_lin 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 其他学习笔记 这题真是凝聚了很多精华,那么我们就介绍这题的四兄弟: 大哥 平均数 这道题是其他兄弟的基础。 二哥 Best Cow 这位更是重量级,因为没特长只能强大哥的外貌,会大哥即识二哥。 三哥 PROSJEK 这位哥看似有点创新却仍没逃过一家子的基因,只是变为了小数运算。 四哥 寻找段落 作为 阅读全文
posted @ 2024-09-08 15:42 sad_lin 阅读(4) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 下一页