
算法
ygx.
这个作者很懒,什么都没留下…
展开
-
快速掌握二分
r = mid 时候不用加1 因为下一步l = r 直接会退出循环。加不加1 完全取决于 l = mid 还是r = mid。l等于mid时必须+1向上取整 不然会陷入l=l的死循环。一个mid = (l+r+1)>>1。一个mid = (l+r)>>1。原创 2022-09-14 08:41:14 · 100 阅读 · 0 评论 -
简单的链表封装(类)
【代码】简单的链表封装(类)原创 2022-08-31 07:59:36 · 370 阅读 · 0 评论 -
链表的简单实现
【代码】链表的简单实现。原创 2022-08-30 13:37:21 · 163 阅读 · 0 评论 -
购买搭配(记录集合大小的并查集+01背包)
#include<bits/stdc++.h>using namespace std;const int N=1e4+10;int v[N],w[N],p[N],f[N];int find(int x){ if(p[x]!=x) p[x]=find(p[x]); return p[x];}int main(){ int n,m,W; cin>>n>>m>>W; for(int .原创 2022-05-22 19:23:47 · 97 阅读 · 0 评论 -
格子游戏(二维坐标下的并查集)
#include<bits/stdc++.h>using namespace std;const int N=40010;int p[N];int n,m;int get(int x,int y){ return x*n+y;}int find(int x){ if(p[x]!=x) p[x]=find(p[x]); return p[x];}int main(){ scanf("%d%d",&n,&m).原创 2022-05-22 18:22:37 · 288 阅读 · 0 评论 -
质因数分解
#include<bits/stdc++.h>using namespace std;/*质因数分解 扫描2~sqrt(n)的每个数d,若d能整除n,则从n中除掉所有的因子d,同时累计出去d的个数*/void fj(int x){ for(int i=2;i<=x/i;i++) //为什么循环结束条件是i<=x/i? { //i<=x/i ==> i<=sqrt(x); 因为.原创 2022-05-21 19:20:03 · 114 阅读 · 0 评论 -
埃氏筛分析
#include<bits/stdc++.h>using namespace std;const int N=1e6+10;/*埃氏筛要得到自然数n以内的全部质数,必须把<=√n的所有质数的倍数剔除,剩下的就是质数。*/int primes[N],n,cnt=1;bool st[N];void get_prime(int n) //求1~n的所有质数{ for(int i=2;i<=n;i++) //1不是质数,故从2开始 if(!st原创 2022-05-19 19:01:24 · 104 阅读 · 0 评论 -
链状石子合并
#include<bits/stdc++.h>using namespace std;const int N=310;int a[N],f[N][N],s[N],n,g[N][N];/*状态表示 f[i][j] 集合 表示将第i堆到第j堆合并的所有方法的集合 属性 min 状态计算 以最后一次合并的分界线k来划分(即最后一次合并的是区间是[i,k],[k+1,j]) (i<=k<j) f[i][j]=min(以k为分界线的不同的分.原创 2022-05-18 18:09:21 · 102 阅读 · 0 评论 -
滑雪(记忆化搜索)
#include<bits/stdc++.h>using namespace std;/*状态表示 f[i][j] 集合:表示所有从g[i][j]出发的路径长度 属性:max状态划分考虑下一步怎么走(前提是下一步可以走,即:下一步的高度小于当前所在的高度) 上 f[i-1][j] + 1 下 f[i+1][j] + 1 左 f[i][j-1] + 1 右 f[i][j+1] + 1 f[i][j]=上面四种情况中的最.原创 2022-05-16 16:44:02 · 132 阅读 · 0 评论 -
D - Doin‘ Time
该题考的是区间DP问题可以把题中所说的选中x把a[x]用a[x]*a[x+1]%P替换理解为将a[x],a[x+1]合并得到a[x]*a[x+1]%Pf[l][r]表示将 a[l] ~a[r] 合并的所有不同方法的集合 属性为得分的max状态转移方程 f[l][r] = f[l][r]=max(f[l][r],f[l][k]+f[k+1][r]+(a[l][k]-a[k+1][r])*(a[l][k]-a[k+1][r]));f[i,j] 可以以最后 一次合并的分界不同将其分为...原创 2022-05-13 23:41:57 · 258 阅读 · 0 评论 -
快速幂及其推导
#include<bits/stdc++.h>using namespace std;typedef long long LL;int qmi(int a,int b,int p){ int res=1%p; while(b) { if(b&1) res=(LL)res*a%p; a=(LL)a*a%p; b >>= 1; } return res;}int .原创 2022-05-03 13:56:09 · 205 阅读 · 0 评论 -
BFS解决简单迷宫问题
#include<bits/stdc++.h>using namespace std;const int N=110;int g[N][N];//存地图int n,m;typedef pair<int,int> PII; //存每个坐标int dx[]={-1,0,1,0}; int dy[]={0,1,0,-1}; //表示方向 上 右 下 左int dist[N][N];//1.标记每个点是否走过 注意:每个点只遍历一次 2.记录图中某个点到起点的最短距离..原创 2022-05-02 17:31:37 · 677 阅读 · 0 评论