自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 全局光照算法探究

全局光照

2022-11-07 09:53:42 117

原创 DXR相关

图形学DXR笔记

2022-10-05 09:46:01 126

原创 图形学基础1

图形学基础知识

2022-09-03 01:23:06 307

原创 数据结构-排序

直接插入排序快速排序快速排序的不稳定性:会退化为O(n^2)改良:pivot可以随机选取,但是依旧无法改变最坏时间复杂度堆排序堆排序就是利用完全二叉树中父节点与孩子结点的内在关系进行排序。最坏时间复杂度也是O(nlogn),不会依据序列顺序而变化不稳定,对小文件有效,对大文件无效归并排序不是原地排序,需要空间复杂度O(n)...

2021-09-23 17:27:48 74

原创 数据结构-堆

模拟堆数组建树://建树时间复杂度O(n)void buildtree(int n){ for(int i=1;i<=n;i++) cin>>h[i]; for(int i=n/2;i;i--) down(i);}删除和插入都记得改变cnt!

2021-09-18 23:56:43 51

原创 数据结构-矩阵和广义表

三角矩阵和对称矩阵的存储其中k是索引下标,第n*(n+1)/2+1存储的是常数。对称矩阵可以参考下三角矩阵的存储方式。对角矩阵存储0号位置存的是主对角线稀疏矩阵的存储三元组查找,删除,增添耗时使用十字链表法:其中M.chead和M.rhead分别代表行,列的头指针...

2021-09-16 03:34:22 117

原创 数据结构-霍夫曼树

题目合并果子https://www.acwing.com/video/127/上图结构是一颗完全二叉树,叶子节点是要合并的果子耗费体力等于所有的叶子节点权值乘以叶子节点到根节点的距离注意点:1.要把权值最小的放在最深的层次上2.n堆进行一轮合并后,变为n-1堆,n-1堆的合并依然满足第一点(最优子结构)在这里插入代码片...

2021-09-16 02:57:05 931

原创 数据结构-树

基本概念1.根节点为第一层(layer)2.把结点的子树棵树称为结点的度(degree),树中结点的最大的度成为树的度3.满足连通、边数等于顶点数1的结构一定是一棵树4.结点的深度是从根节点数起,结点的高度是从最底层叶子节点数起5.多棵树组成森林6.满二叉树,完全二叉树二叉树生成结点:node* newNode(int v){ node* Node=new Node; Node->data=v; Node->lchild=Node->rchild=NULL; r

2021-09-11 09:47:42 108

原创 数据结构-图论

最小生成树MST性质Prime算法U集合 为落在最小生成树中的顶点,TE集合 为最小生成树中的边集合,V-U集合 为尚未落在最小生成树中的顶点集

2021-09-10 16:18:36 179

原创 算法中的预处理操作

打表题目打两个表,分别记录左侧的最大值以及右侧的最小值。#include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;const int maxn=100010;int a[maxn],n;int leftmax[maxn];int rightmin[maxn];vector<int> re;int main(){ memset(leftmax,-inf,sizeof leftma

2021-09-09 14:20:32 95

原创 超级源点与超级汇点

参考:https://blog.csdn.net/weixin_43627118/article/details/100134565超级源点如果路径权值相同可以使用多源BFS,开始时将多个起点直接放入队列中。路径权值不同则使用Dijkstra,或者SPFA。多源BFS见:https://www.acwing.com/activity/content/problem/content/3511/1/AC代码:#include<bits/stdc++.h>#define row firs

2021-08-05 19:33:37 63

原创 快速幂与矩阵快速幂

参考传送门 快速幂快速幂是基于二分的思想,时间复杂度为O(log(n))。原理:如下图:a^57=a^1 * a^8 * a^16 * a^32ll qp(ll a,ll n){ ll ans=1; while(n) { if(n&1) ans*=a; a*=a; n=n>>1; } return ans;}模下快速幂数论知识:(a*b)%c = (a%c * b%c)%c(a+b)%c = (a%c + b%c)%cll qpm(ll

2021-04-15 21:11:40 204

原创 蓝桥杯寒假作业(全排列模板)

题目题解注意整除要加上条件 a%b==0记住该模板#include<bits/stdc++.h>using namespace std;int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13};//0~12int ans=0;bool check(){ if(a[0]+a[1]==a[2]&& a[3]-a[4]==a[5]&& a[6]*a[7]==a[8]&&

2021-04-14 08:49:43 217

原创 蓝桥杯 四平方和 数的分解(简单dfs,算法时间复杂度优化)

题目程序输入为一个正整数N (N<5000000)要求输出4个非负整数,按从小到大排序,中间用空格分开例如,输入:5则程序应该输出:0 0 1 2再例如,输入:12则程序应该输出:0 2 2 2再例如,输入:773535则程序应该输出:1 1 267 838资源约定:峰值内存消耗 < 256MCPU消耗 < 3000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意

2021-04-13 11:06:22 395

原创 蓝桥杯剪邮票(状态编码,非迷宫式dfs,必看)

文章转载自传送门#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=10000;int hash[maxn];int vis[3][4];int tol;int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};void dfs(int cnt){ if(cnt==5){ int tmp=0; f

2021-04-13 02:10:19 68

原创 方格填数(递推dfs,状态编码)

题目如下的10个格子填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?题解本题其实并不需要状态编码,因为从1行2列开始填和从1行3列开始填,所得到的状态是不一样的,不像 蓝桥杯的7段码 中状态会有重叠。写到一半才注意到,但是可以练练状态编码。状态编码:这里使用映射:map<pair<int,int>,int> mp,如1行1列映射为数字0,1行2列映射为数字1,1行3列映射为数字2,假如1行2列里填的数为0,1行

2021-04-11 12:39:24 98

原创 蓝桥杯小朋友崇拜圈(递推,dfs找环,优化)

题目测试数据1:93 4 2 5 3 8 4 6 9测试数据2:3022 28 16 6 27 21 30 1 29 10 9 14 24 11 7 2 8 5 26 4 12 3 25 18 20 19 23 17 13 15代码#include<bits/stdc++.h> using namespace std;int par[100010];int dep[100010];//即可存储深度,也可表示是否被访问过 int re[100010];// re[num]

2021-04-08 23:07:00 206

原创 蓝桥杯作物杂交(递归,记忆化dfs)

题目传送门解析递归思路:要在最短时间得到T类型种子,就要在最短时间内得到它中间类型的种子。#include<bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;const int maxn=2005;int N,M,K,T;int my_time[maxn];typedef struct cross//a,b杂交经历时间time { int a; int b; int time;}Cross;vecto

2021-04-05 19:07:52 556 4

原创 dfs终极总结

写在前面我们常使用的不带返回值的dfs,void dfs(…),一般是从起点搜索到终点,就像走迷宫一样,从本状态列出下一步可走的状态,然后dfs下一步可走的状态,一直达到终点。这类dfs属于递推(从小(边界条件)往大搜索),比如二叉树的先根序序遍历(void preorder),先遍历根结点,再往左子树,右子树递推着遍历。但是有时候,我们发现将大问题分解为小问题直至问题边界更利于代码的书写,这类就属于递归,比如求斐波那契数列,f[n]=f[n-1]+f[n-2],求f[n]的问题就被转换为求f[n-1]

2021-04-05 18:59:04 479

原创 组合基本知识与解题方法

组合数种类的公式#include<bits/stdc++.h>using namespace std;typedef long long ll;ll Cmn(ll m,ll n)//从m个选n个的种类数{ if(n==m||n==0) return 1; else return Cmn(m-1,n)+Cmn(m-1,n-1);}利用dfs枚举组合数的种类参考:https://blog.csdn.net/qq_43328040/article/details/8727

2021-04-03 17:26:39 103

原创 蓝桥杯测试次数(动态规划)

题目解析假设有10层楼,5个手机;假设在第6层摔了第一个手机,假如手机没摔坏,则在第7~10层继续摔剩余4个手机,且测试次数+1;假如定义F(i,j)为i层楼,j个手机状态时的测试次数;则描述上述情景是状态转移:F(10,5)=F(4,4)+1(前面的4是7~10层共有4层,后面的4是还有4个手机)。这就是动态规划中的子问题分解。下面理解最坏情况,还是上面的例子,可能手机摔坏了,则在第1~5层继续摔剩余4个手机,即F(10,5)=F(5,4)+1,所以在第六层摔手机可能摔坏也可能没摔坏,因为要是最

2021-04-01 22:35:09 804 1

原创 蓝桥杯(矩阵)(求方案种类数)(动态规划)

题目解析假如要将1~4按次序填入2*2的方格中,有如下两种方案:这里有性质:填数时上面一行的列数一定大于等于下面一行的列数。因为我们是按从小到大的顺序填数的,这样才能保证同一列中下面一行的数要大于上面一行。这里假设dp[i][j]为第一行放i个数,第二行放j个数的方案数,i的范围为0 ~ 1010,j的范围为0 ~ i。求方案数:放置第n个数在i行j列的方案数,上一步可能是放第n-1个数在i-1行j列,或是放第n-1个数在i行j-1列:dp[i][j]=dp[i-1][j]+dp[i][j-1]

2021-03-31 17:32:22 945

原创 蓝桥杯子串分值(时间复杂度优化)

题目f(“aba”)=1 因为b恰好出现一次解析参考博客:传送门这里依然以abaca为例,当遍历到i=1(字符a时),该字符贡献的子串数为:左侧只能不选,右侧可以不选或是选1个,所以种类数为12=2;当遍历到i=2(字符b时),该字符贡献的子串数为:左侧可以不选或是选1个,右侧可以不选或是选1,2,3个,所以种类数为24=8;当遍历到i=3(字符a时),该字符贡献的子串数为:左侧可以不选或是选1个,右侧可以不选或是选1个,所以种类数为2*2=4;以此类推。AC代码#include&

2021-03-28 11:25:42 255

原创 基本常识

日期处理蓝桥杯回文日期参考:https://blog.csdn.net/mr_ghost812/article/details/104220234给出一个8位数(yyyymmdd)check是否是合格的日期int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool check(int date){ int year = date / 10000; int mouth = (date / 100)

2021-03-28 00:25:44 81

原创 蓝桥杯七段码简约版(递推dfs,状态编码)

题目解析将a,b,c,d,e,f,g用1-7编码,作出它们的邻接矩阵对a,b,c,d,e,f,g进行dfs(对a的dfs所得的状态一定包含a,如a,ab,af,abc…,同理对b的dfs得到的状态一定包含b,如b,ba,…,以此类推),明显对a的dfs得到的ab和对b的dfs得到的ba两个状态是重合的,所以要设定一个针对状态的vis数组,如果该状态被访问过,就不重复计数。要使用 状态的vis数组 就要提前对状态编码编码原则:0灭1亮 ,状态对应的二进制编码范围0000000~01111111,最

2021-03-27 23:10:31 167

原创 01背包与完全背包

题目杭电oj2602 : bone_collector第三行是价值w,第四行是所占容量v,设定f[i][v]为前i件恰放入一个容量为v的背包可以获得的最大价值其状态转移方程为f[i][v]=max(f[i-1][v],f[i-1][v-c[i]]+w[i]) 即不选或选第i件物品具体公式如下:要想知道f[1][2],就得需要知道上图黄色标注部分,所以能够设定二重循环:for i=1..N //从1开始循环,因为i=0是初值 for v=0..V 公式AC代码:#include&l

2021-03-27 10:40:09 70

原创 字符串处理基本知识

易错点实现前导0的删除:如 0002 转为 2错误代码:string s;cin>>s;for(int x=0;x<s.size();x++)//去掉前导0 { if(s[x]=='0') s.erase(s.begin()+x); else break;}错因:s在erase时,其长度发生变化,erase第x位时,x+1,x+2…都会向前移一位。正确代码:string s;cin>>s;for(int x=0;x<s.size();x++)

2021-03-27 01:32:22 134

原创 删数问题(贪心)

题目https://www.luogu.com.cn/problem/P1106解析175438要删一个数,使得剩下的数最小错误贪心策略:总是删除最大的那个数,如175438删除8得到17543;明显不如删除7得到15438小;所以应该对贪心做一些限制正确的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去。我们想让处在高位的数字尽量小,如1781如果删除7的话,8会顶替7称为新的高位(181),其效果就不如删除8好(171)如果数列是递增的,则删除最大的那个数,即最后一个数字;否则就删除第

2021-03-27 01:17:09 300

原创 蓝桥杯排队打水问题(贪心)

题目https://www.dotcpp.com/oj/problem1527.html解析题意:每个人要打水,这个人所花费的时间等于他前面的人花费的时间加上自己打水的时间。总花费时间等于每个人的花费的时间的总和。贪心原则:排队时越靠近前面的人花费的时间被后面的人加上计算的次数越多,假如有3个人依次排队(用时分别为T1,T2,T3),一个水管,则总时间为3T1+2T2+T3。因此打水时间少的人应该先打水。基本操作:(1):将打水时间按从小到大先后排序(2):将排序后的时间按顺序依次放入每个水龙

2021-03-26 23:16:47 592

原创 蓝桥杯k倍区间(时间复杂度优化)

题目http://lx.lanqiao.cn/problem.page?gpid=T444解法#include<bits/stdc++.h>using namespace std;//连续子序列求和:前缀和//k倍区间:(sum[r]-sum[l-1])%k==0 推出 sum[r]%k==sum[l-1]%k,同余 //假如mod[m]=x,含义为:余数为m的sum个数为x,从x个数中选2个:组合数Cx2,它们两个数相减就是K倍区间,因为这x数都是同余的。const int m

2021-03-26 20:38:12 73

原创 Ball in berland(代码时间复杂度优化)

题目https://codeforces.ml/contest/1475/problem/C题目翻译参考:https://blog.csdn.net/qq_43697906/article/details/113241534

2021-03-26 19:31:46 120

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除