笔记
haniwn
这个作者很懒,什么都没留下…
展开
-
LCA 树上差分
对点加,两两点间求LCA,差分。原创 2022-09-29 20:48:26 · 277 阅读 · 0 评论 -
第K大/小数
【代码】第K大/小数。原创 2022-09-29 20:47:12 · 355 阅读 · 0 评论 -
线段树合并
【代码】线段树合并。原创 2022-09-20 16:50:48 · 54 阅读 · 0 评论 -
AcWing dp 最长上升子序列模型学习
AcWing 895. 最长上升子序列题意:给定一个长度为 NNN 的数列,求数值严格单调递增的子序列的长度最长是多少。1≤N≤10001 \leq N\leq 10001≤N≤1000思路:状态表达:f[i]f[i]f[i] 表示从 1 开始以 iii 为结尾的上升子序列最大长度状态方程:f[i] = max(f[i] , f[j] + 1)图片来自AcWing 彩色铅笔大佬集合划分#include<bits/stdc++.h>using namespace std;co原创 2022-04-22 19:58:23 · 92 阅读 · 0 评论 -
AcWing 背包学习
01背包问题题目:解题分析:对于每个物品不断做最优决策,每个物品面临选与不选,当前空间j < v[i] 时,该件物品无法选择,只能从从上一层继承f[i][j] = f[i-1][j]如果空间足够,则有选与不选选:f[i][j] = f[i-1][j-v[i]]+w[i]不选:f[i][j] = f[i-1][j]两者取最大值,即f[i][j] = max(f[i-1][j] , f[i-1][j-v[i]] + w[i])二维代码#include<bits/stdc++.h原创 2022-03-11 19:02:47 · 294 阅读 · 0 评论 -
Acwing 并查集学习记录
Acwing 1250. 格子游戏题意:输入:矩阵长宽为n,m次操作输出:输出一行:在第几步的时候结束。假如 m 步之后也没有结束,则输出一行“draw”。思路:当形成闭环的时候游戏结束,所以添加最后一边时,应满足该边的两端在同一个联通块中,所以可用并查集,判断两点的祖宗节点是否相同。当起始点为(0,0)时,可通过公式x∗n+yx*n+yx∗n+y 将二维映射到一维。#include<bits/stdc++.h>using namespace std;const int N原创 2022-01-27 17:26:41 · 291 阅读 · 0 评论 -
数据结构课程作业
走迷宫栈#include<iostream>#include<cstdio>#define MAXSIZE 10000using namespace std;int a[100][100];bool vis[100][100];//标记该点是否走过、 int n,m;//迷宫大小 n行m列。 int x1[4]={1,-1,0,0};int y1[4]={0,0,1,-1};//移动数组 bool check(int x,int y){ if(x<原创 2021-11-19 09:24:13 · 70 阅读 · 0 评论 -
树的直径 HDU2196
若想做这道题 首先要懂得树的最长路怎么计算首先假设树的最长路的两个叶子节点为v1,v2,那么现有结论,从任意一点u出发走*到的最远的点一定是(v1,v2)中的一点,然后再从v1或者v2出发走到的最远点一定是v2或者v1。所以经过两次搜索就能找到最长路径。此题需要三次dfs第一次找到其中一个v1 或v2 ,再两次从v1 -> v2及v2 -> v1我们知道对于任意一点,它所能达到的最远距离为v1 或 v2 ,那么逆向思维, 我们可以先找到这两个端点,然后用dis数组来分别保存这两个端点到原创 2021-08-12 16:56:50 · 54 阅读 · 0 评论 -
SPFA 存最短路径 POJ 2457
题目链接:http://poj.org/problem?id=2457题意:一些奶牛从地球(编号为1)出发前往太空为它们的谷仓购置一台新的挤奶机。太空中一共有N(1<=N<=1000)个星球。奶牛们已经确定了想要的挤奶机在最后一个星球(编号为N) 。太空中存在M(1<=M<=50000)条两个星球之间的路径。帮助他们找到经过星球数量最少的路径,以获得物品K。如果此任务不可能完成,则输出-1。#include<iostream>#include<algo原创 2021-08-09 18:37:45 · 79 阅读 · 0 评论 -
盒子与球问题
n个不同球,m个相同盒子第二类斯特林数:表示将n个不同的元素拆分成m个集合的方案数,即f[n]。递推式: 1.如果n个元素构成了m-1个集合,那么第n+1个元素单独构成一个集合。 f[n][m-1] 2.如果n个元素已经构成了m个集合,将第n+1个元素插入到任意一个集合。 m*f[n][m]f[n]=f[n−1][m−1]+f[n−1][m]∗mf[n]=f[n-1][m-1]+f[n-1][m]*mf[n]=f[n−1][m−1]+f[n−1][m]∗mf[1][1]=1原创 2021-08-02 21:31:20 · 142 阅读 · 0 评论 -
矩阵快速幂
#include<bits/stdc++.h>#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);typedef long long ll;using namespace std;const int mod=1e9+7,N=110;const double eps=1e-8;struct mat{ ll a[N][N];}ans,in;//in输入数组,mat mul(mat A,mat B,int n原创 2021-07-29 10:49:39 · 52 阅读 · 0 评论 -
关于分解质因数中为什么不用判断i是否为质数
将n得质因数从大到小输出 以及出现次数void divide(int n){ for(int i=2;i<=n/i;i++) { int sum=0; if(n%i==0) { while(n%i==0) { n/=i; sum++; } cout<<i<<" "<<sum<<endl; } } if(n>1) cout<<n<<"原创 2021-05-31 20:39:55 · 182 阅读 · 0 评论