上一页 1 ··· 4 5 6 7 8 9 10 下一页
摘要: P4568 [JLOI2011] 飞行路线 考虑跑多层图,每层图连条边权为0的边,跑 dijkstra 即可。 #include <bits/stdc++.h> using namespace std; #define ll long long const int N=1e7+10; int n,m 阅读全文
posted @ 2024-09-14 16:28 sad_lin 阅读(33) 评论(0) 推荐(0)
摘要: 类似最小生成树,对边排序依次加上,但是数据大,要进行离线处理,存起来,将比他小的边加上,判断连通用并查集(路径压缩,按秩合并)。 唐完的我在赛时没写按秩,而且while没写终止条件(唐老鸭)。 先按秩后合并,测评机有点玄学但确实要这样。 初版: #include<bits/stdc++.h> usi 阅读全文
posted @ 2024-09-12 16:15 sad_lin 阅读(9) 评论(0) 推荐(0)
摘要: P1892 [BOI2003] 团伙 种类并查集!!!! 存敌人 主要要理解敌人的敌人就是朋友这句话,我们就可以用并查集来维护朋友,用一个数组来储存他的其中一个敌人,后面遇到其他他的敌人时,将他的敌人用并查集连起来成为朋友。 注意这题要你输出团队数而不是团队的人数不会就我这么唐吧。 #include 阅读全文
posted @ 2024-09-11 16:05 sad_lin 阅读(28) 评论(0) 推荐(0)
摘要: 四倍经验 51nod 2875 单词游戏 acwing 1185. 单词游戏 洛谷 SPOJ WORDS1 - Play on Words 单词 Play on Words 题意 将 \(n\) 个单词,问能否把这些单词首尾相接的连起来(头尾字母要一样)。 分析 我们可以将每一个字母看成一个节点,这 阅读全文
posted @ 2024-09-11 09:29 sad_lin 阅读(42) 评论(0) 推荐(0)
摘要: 51nod 1720 祖玛 这又是一个区间 dp,但这题又和其他的不一样,这题又用记忆化搜索,但是多学一种方法也没事,但其实用搜索后就模拟即可了。 #include<bits/stdc++.h> using namespace std; // 定义全局变量 int n; // 数组长度 int dp 阅读全文
posted @ 2024-09-10 19:27 sad_lin 阅读(17) 评论(0) 推荐(0)
摘要: 51nod 3180 矩阵连乘 感觉区间 dp 还是要感性理解,但好像区间有套路的,这和石子合并很像,就根据题意模拟。 这个写法的区间比较巧妙,左右同时增加,相当于滑动窗口,因为一开始花费一个是0,所以注意dp的初始化。 #include<bits/stdc++.h> using namespace 阅读全文
posted @ 2024-09-10 18:58 sad_lin 阅读(12) 评论(0) 推荐(0)
摘要: P1775 石子合并(弱化版) 感觉 dp 太难了,这真的感觉太难学了,但是还要写题记积累啊,唉! 感觉不用讲题意了(那你也别讲题解了)就是石子之间可以合并,合并的代价是这堆石子数,问如何合并全部石子后总代价最小。 考虑用区间 dp,设状态为 \(dp[i][j]\) 为区间 \([i,j]\) 的 阅读全文
posted @ 2024-09-10 18:49 sad_lin 阅读(163) 评论(0) 推荐(0)
摘要: 模板题 我写不明白我要用其他人的学习笔记 这个 其实也没法写,真要一步步写很复杂。 无非就是依次将每个数减掉系数,最后成为一个单位矩阵。 所以看注释: #include<bits/stdc++.h> using namespace std; #define ll long long const in 阅读全文
posted @ 2024-09-10 11:18 sad_lin 阅读(36) 评论(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 阅读(22) 评论(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 阅读(36) 评论(0) 推荐(0)
摘要: 51nod 1051 最大子矩阵和 可以用前缀和容斥优化到 \(O(n^4)\),但是不够进行如下图操作: 将每一列的数值都压缩到一维的数组上,就转换为求最大字段和问题,时间复杂度 \(O(n^3)\)。 看看代码就知道了。 #include <bits/stdc++.h> using namesp 阅读全文
posted @ 2024-09-09 20:08 sad_lin 阅读(21) 评论(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 阅读(21) 评论(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 阅读(7) 评论(0) 推荐(0)
摘要: 题目链接 学习链接 设状态 \(dp[i][j]\) 表示整数 \([1,i]\) 满足要求的排列中,最后一个数选 \(j\) 的排列数。 开一个数组记录他的状态: 把前面已选好的序列中大于等于 \(j\) 的数都加一后再把 \(j\) 加到后面。 #include <bits/stdc++.h> 阅读全文
posted @ 2024-09-09 14:45 sad_lin 阅读(9) 评论(0) 推荐(0)
摘要: 51nod 1050 循环数组最大子段和 虽然是板子题,两种做法,我们先写一种,另一个咕咕。 因为是循环,所以分为两种,中间的和两边的,中间的直接dp求最大,两边的转化一下就是总的数字和减去中间的最小数字和。 #include <bits/stdc++.h> using namespace std; 阅读全文
posted @ 2024-09-09 10:37 sad_lin 阅读(11) 评论(0) 推荐(0)
上一页 1 ··· 4 5 6 7 8 9 10 下一页