自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 bfs求最短路径

经典迷宫问题AC代码#include <iostream>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int N = 110;int n, m;int g[N][N], d[N][N];typedef pair<int, int> PII;queue<PII> q;int dx[4] = {

2022-04-06 21:51:24 1180

原创 dfs全排列

C++有专门实现全排列的函数:next_permutation(start,end),这个函数在暴力解决问题方面有很大作用,使用时需要引入头文件algorithm,当当前序列不存在下一个序列时就会结束,若想得到一个序列的全部排列,那么使用前一定要记得先排序。int a[]={1,2,3,4};do{ cout<<a[0]<<' '<<a[1]<<' '<<a[2]<<' '<<a[3]<<endl; }w

2022-03-31 20:50:02 543

原创 几种排序笔记

快速排序void quick_sort(int q[], int l, int r){if(l >= r) return;int x = q[l + r >> 1], i = l - 1, j = r + 1;while(i < j){do i ++ ; while (q[i] < x);do j -- ; while (q[j] > x);if(i < j) swap(q[i], q[j]);}quick_sort(q, l, j);qui

2021-11-10 22:36:02 323

原创 树状数组入门算法笔记

预备知识——前缀和A为N个数所在的数组,B为另一个新的数组令B数组的第 i 项为A数组的A1至Ai项之和即:Bi = A0+A1+A2 + …+Ai则有Bi = Bi-1 + A i(其中B0 = A0)特别的,有时候为了方便,AB数组都从下标1开始前缀和的主要用途?区间求和!二叉树变化后二进制最后一个1代表某个数,Ci从Ai往前数这么多项方法1:(易于理解)int lowbit(int x){ return x - ( x & (x - 1) ) ;}方法

2021-11-01 16:37:03 166

原创 STL在竞赛中的应用

STL栈的应用栈的特点:1、先进后出(FILO)2、从栈顶删除元素3、在栈顶加入元素常见操作:判断栈是否为空查询栈大小访问栈顶元素栈顶加入元素删除栈顶元素STL种栈的基本用法创建栈对象:stack<元素类型> 栈名;栈顶添加元素:栈名.push(元素名);删除栈顶元素:栈名.pop();访问栈顶元素:栈名.top();//要先确保栈非空判断是否为空:栈名.empty();返回栈的大小:栈名.size();说明:栈和队列一样,没有clear之类的函数,如果想要

2021-10-28 15:51:14 364

原创 记忆化DFS和基于优先队列的BFS算法笔记

记忆化DFS例1:斐波那契数列递推:效率高,可以避免很多重复的计算递归:优点:程序很简洁缺点:空间容易爆栈,时间慢int dfs(int n){ if(n == 1 || n == 2) return 1; else return ( dfs(n-1)+dfs(n-2) )%1000000007;}记忆化dfsint dfs(int n){ if(fib[n]) return fib[n]; if(n == 1 || n == 2) fib[n] = 1; else fi

2021-10-17 17:36:05 174

原创 每日一题acwing3768字符串删减

字符串删减原题链接题目描述:AC代码:#include <iostream>#include <cstring>using namespace std;int main() { int n; string s; cin >> n >> s; int ret = 0, cnt = 0; for(int i = 0; i < n; i++) { if(s[i] == 'x') {

2021-10-17 16:49:04 115

原创 每日一题acwing3769移动石子

移动石子原题链接题目描述:AC代码:#include <iostream>#include <vector>using namespace std;int main() { int T = 1; cin >> T; while(T--) { int n, d; cin >> n >> d; vector<int> a(n); for

2021-10-17 16:48:08 139

原创 每日一题acwing 3767 最小的值

最小的值原题链接题目描述:思路:贪心ai = bi时,p取何值都无所谓,与最终的和都没有影响ai < bi时,(ai - bi)* pi = -pi 要使S1-S2>0,那么pi就要尽量的小,p取1ai > bi时,(ai - bi)* pi = pi 正数的和减去负数的和大于0,pi尽可能的小,p = [(x + 1) / y]向上取整ceil() 向上取整函数floor() 向下取整函数round() 浮点数四舍五入AC代码:#include

2021-10-15 21:02:13 96

原创 每日一题acwing3764 三元数异或

三元数异或原题链接题目描述:思路:贪心,假设a>=b;确定第一位是2,那么a和b的第一位一定都是1;当x出现0时,a和b都加’0‘;当x出现1时分两种情况:1、已经确定a>b了,那么a+‘0’,b+‘1’2、没确定a>b,那么a+‘1’,b+‘0’, 然后a>0当x出现2时,分两种情况:1、已经确定a>b了,那么a+‘0’,b+‘2’2、没确定a>b,那么a+‘1’,b+‘1’,AC代码:#include <iostream>

2021-10-15 20:04:43 86

原创 组合博弈入门算法笔记

组合博弈入门算法笔记取子游戏:什么是组合游戏——有两个玩家;游戏的操作状态是一个有限的集合(比如:限定大小的棋盘);游戏双方轮流操作;双方的每次操作必须符合游戏规定;当一方不能将游戏继续进行的时候,游戏结束,同时,对方为获胜方;无论如何操作,游戏总能在有限次操作后结束。概念:必败点和必胜点(P点&N点)必败点(P点):前一个选手(Previous player)将取胜的位置成为必败点。即下一个选手必败。必胜点(N点):下一个选手(Next player)将取胜的位置成为必

2021-10-15 18:30:42 1164 1

原创 二分匹配算法笔记

二分匹配二分图的最大匹配在二分图的应用中,最常见的就是求————最大匹配很多其他的问题都可以转化为匹配问题来解决匈牙利算法题型:真正求二分匹配的题目很少,往往做一些简单的变化比如:二分图的最小顶点覆盖什么是二分图的最小顶点覆盖?在二分图中求最少的点,让每条边都至少和其中的一个点关联,这就是:二分图的”最小顶点覆盖“。一句话记忆:最小顶点覆盖就是用最少的点覆盖所有的边变化(二)DAG图的最小路径覆盖什么是DAG图的最小路径覆盖?用尽量少的不相交简单路径覆盖有向无环图(DAG)的所

2021-10-13 22:44:40 162

原创 每日一题acwing3763数字矩阵

数字矩阵原题链接题目描述:思路:选两个相邻元素变换,因为同一个元素可以被多次选中,则可以任意交换两个位置元素的符号而中间元素符号不变,如果负数的数量为偶数,则可以两两抵消全部都变为正数,负数的数量为奇数,那么将绝对值最小的那个数变为负数AC代码:#include <iostream>#include <algorithm>#include <cmath>using namespace std;int arr[15][15];int main()

2021-10-13 21:23:47 150

原创 DFS入门算法笔记

预备知识二叉跟的遍历1、先根遍历(根左右)2、中跟遍历(左根右)3、后根遍历(左右根)先根遍历结果:271653894中根遍历结果:175632849后跟遍历结果:153674982给定先根中根遍历结果,可唯一确定二叉跟给定中根后跟遍历结果,可唯一确定二叉根给定先根后根遍历结果,不能确定二叉跟深度优先搜索(DFS)深度优先搜索基本模型:深度优先搜索的关键在于解决“当下该如何做!”至于下一步该怎么做,则与当前一样(只是参数不同而已)。伪代码:void dfs(int s

2021-10-12 22:34:14 200

原创 每日一题acwing3761 唯一最小数

唯一最小数原题链接题目描述:思路:用哈希表,记录当前数出现的次数和位置AC代码:#include <iostream>using namespace std;#include <map>#include <string>#include <algorithm>const int N = 200010;int arr[N];int main(){ int T; cin >> T; while(T

2021-10-12 17:56:52 135

原创 每日一题acwing3762二进制矩阵

AcWing 3762. 二进制矩阵 原题链接思路:暴力解法,不是最优解,九宫格,分四种情况,右下角最后一个格子,最后一列,最后一行,其他情况,四个格子做三次交换就可以只把其中一个格子改变,其余三个不变AC代码:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 110;int n,m;char g[N][N];

2021-10-11 20:46:07 129

原创 HDOJ 1372Knight Moves

跳马移动原题链接题目描述:思路:BFS,借用二维数组使用for循环遍历八种情况,这样就不用一个一个写了AC代码:#include <iostream>#include <string.h>#include <algorithm>#include <queue>using namespace std;struct node{ int x, y; int steps;}now,nex,target;int m,n,s

2021-10-10 20:40:42 120

原创 HDOJ 1495非常可乐

非常可乐原题链接题目描述:思路:当可乐总量为奇数时,不可能均分,直接输出结果;将i被子倒入j杯中时,分两种情况,一种是能倒完,一种还有剩余AC代码:#include <iostream>#include <queue>#include <string.h>using namespace std;int N,M,S;struct node{ int num[3]; int steps;//次数}now,nex;int vis[1

2021-10-10 20:33:26 187

原创 HDOJ 1548A strange lift

A strange lift原题链接题目描述:思路:树的层次遍历,典型的BFS题目,注意标记,不要添加已有的楼层AC代码:#include <iostream>#include <algorithm>#include <queue>using namespace std;int N,Start,End;int a[202];//记录每层楼上下的层数int vis[202];//做标记struct pos{ int level;//

2021-10-10 20:25:35 116

原创 BFS入门算法笔记

队列:特点:先进先出从队头删除元素在队尾加入元素STL中队列的基本用法创建队列对象: queue<元素类型> 队列名;队列添加元素: 队列名.push(元素名);删除队首元素: 队列名.pop();访问队首元素: 队列名.front();访问队尾元素: 队列名.back();判断是否为空: 队列名.empty();返回队列大小: 队列名.size();示例:int a,b,c,d;queue<int> q;q.push(1); q.push

2021-10-10 20:11:56 177

原创 HODJ 2191珍惜现在,感恩生活(多重背包)

杭电oj2191多重背包原题链接题目描述:思路:多重背包转化成01背包,然后再空间优化AC代码:#include <iostream>#include <algorithm>#include <string.h>using namespace std;int C,n,m;int cost[110],weight[110],num[110];int dp[110];int main(){ cin >> C; while

2021-09-14 21:47:20 117

原创 leetcode165比较版本号

力扣165比较版本号原题链接AC代码:class Solution {public: int compareVersion(string v1, string v2) { int i = 0, j = 0; while(i<v1.size() || j<v2.size()) { int num1 = 0,num2 = 0; while(i<v1.size() &&

2021-09-14 20:28:16 79

原创 以往AcWing周赛第一题水题

第十五次周赛第一题:青蛙跳原题链接题目:AC代码:#include <iostream>using namespace std;int main(){ long long T, k, a, b; cin >> T; while(T--) { long long x = 0; cin >> a >> b >> k; if(k%2 == 1)

2021-09-14 19:47:59 197

原创 HDOJ 2602Bone Collector

杭电oj2602Bone Collector原题链接题目描述:思路:01背包问题,当前最优解,要么包含第i种物品,要么不包含第i种物品。和物品顺序没有关系,不需要排序。AC代码:#include <iostream>#include <algorithm>#include <string.h>using namespace std;int dp[1010][1010];int c[1010],w[1010];int main(){ in

2021-09-14 19:38:38 93

原创 AcWing 第十六场周赛

这是第一次参加周赛,十来分钟写出了第一题水题,然后就无了,在那发楞,像个傻子一样。

2021-09-12 15:05:27 121

原创 背包-笔记

背包的基本模型:给你一个容量为V的背包和若干种物品,在一定的限制条件下(每种物品都占用一定容量),问最多能放多少价值的物品?

2021-09-10 21:26:05 116

原创 HDOJ 1421搬寝室

搬寝室原题链接题目:思路:sort进行排序,只搬一次的话,从第三个物件开始,分为包含最后一件和不包含最后一件物品两种情况,状态转移方程 dp[i][j] = min(dp[i][j-1], dp[i-1][j-2] + (arr[j-1] - arr[j])* (arr[j-1] - arr[j]))AC代码:#include <iostream>#include <algorithm>#include <cmath>using namespace st

2021-09-09 16:21:09 233

原创 acwing 895最长上升子序列

最长上升子序列原题链接题目描述:思路:计算以i为结尾的长度,如果第i个元素比前面的数大,f[i]++AC代码:#include <iostream>#include <algorithm>using namespace std;const int N = 1010;int arr[N];int dp[N];int main(){ int n; cin >> n; for(int i = 0; i < n; i++)

2021-09-09 16:10:25 128

原创 hdoj 2190悼念512汶川大地震遇难同胞——重建希望小学

杭电oj2190重建希望小学原题链接题目描述:思路:和前面骨牌铺方格类似,找规律递推,f(n) = f(n-1) + f(n-2)*2AC代码:#include <iostream>using namespace std;const int N =35;long long arr[N];int main(){ int c,n; cin >> c; arr[1] = 1; arr[2] = 3; arr[3] = 5;

2021-09-06 20:22:29 210

原创 HDOJ 2047阿牛的EOF牛肉串

杭电oj2047阿牛的EOF牛肉串原题链接题目描述:思路:和前面的骨牌铺方格类似,找规律递推,f(n) = f(n-1) * 2 + f(n-2) * 2AC代码:#include <iostream>using namespace std;const int N = 45;long long int dp[N];int main(){ int n; while(scanf("%d",&n) != EOF) { dp[0]

2021-09-06 20:14:01 124

原创 HDOJ 2084数塔

杭电oj2084数塔原题链接题目描述:思路:典型的动态规划问题,自顶向下分析,自底向上计算,可以化成一个直角三角形结构。AC代码:#include <iostream>#include <cmath>#include <algorithm>using namespace std;const int N = 110;int arr[N][N];int main(){ int t, n, i, j, ans; cin &gt

2021-09-06 20:10:02 164

原创 DP(入门)笔记

DP的思想和特点基本思想:如果各个子问题不是独立的(既:重复的),不同的子问题的个数知识多项式量级(即:有限的),如果我们能够保存已经解决的子问题的答案(一般用数组),而在需要的时候再找出以求得的答案,这样就可以避免大量的重复运算。主要特点:1、最优子结构:一个大问题的最优解,一定包含子问题的最优解;2、重叠子问题;3、无后效性;典型:1、非线性问题线性化2、从小往大算数塔问题:自顶向下分析;自底向上计算...

2021-09-05 15:50:59 196

原创 HDOJ 2041超级楼梯

杭电oj2041超级楼梯原题链接题目描述:思路:找规律,斐波那契数列,f(n) = f(n-1) + f(n-2)AC代码:#include <iostream>using namespace std;const int M = 45;long long arr[M];int main(){ int N, m; cin >> N; arr[2] = 1; arr[3] = 2; arr[4] = 3; f

2021-09-03 20:34:36 170

原创 HDOJ 2501Tiling_easy version

杭电oj2501骨牌铺方格原题链接题目描述:思路找规律,递推,f(n) = f(n-1) + 2 * f(n-2)AC代码:#include <iostream>using namespace std;const int N = 35;long long arr[N];int main(){ int T, n; cin >> T; arr[1] = 1; arr[2] = 3; arr[3] = 5; f

2021-09-03 20:25:05 99

原创 HDOJ 2050折线分割平面

杭电oj2050折线分割平面原题链接题目描述:思路:第n条折线会与前n-1条折线分别形成四个交点,f(n) = f(n-1)+4(n-1) +1AC代码:#include <iostream>using namespace std;const int N = 10010;long long arr[N];//注意:long longint main(){ int c,n; cin >> c; arr[1] = 2; ar

2021-09-03 19:52:06 120

原创 HDOJ 2046骨牌铺方格

杭电oj2046骨牌铺方格原题链接题目描述:思路:以右上角为基点,竖着放一个则放法有f(n-1)种,横着放两个则有f(n-2)种,相加即为铺放方案的总数AC代码:#include <iostream>using namespace std;long long arr[55]; //注意:定义成long long类型,不然会waint main(){ int n; arr[0] = 0; arr[1] = 1; arr[2] = 2;

2021-09-03 19:46:45 340

原创 HDOJ 2454图G的度序

杭电oj2454图G的度序原题链接题目描述:可图形判定:两个概念:1、度序列:若把图G所有顶点的度数排成一个序列S,则称S为图G的度序列。2、序列是可图的:一个非负整数组成的有限序列如果是某个无向图的度序列,则称该序列是可图的。注意它是非增序列,即从大到小排序,每次减完都要重新排序,如果出现一个负数则该图形不能组成。AC代码:#include <iostream>#include <algorithm>using namespace std;

2021-09-02 17:41:27 387

原创 HDOJ 2037今年暑假不AC

杭电oj2037今年暑假不AC原题链接题目描述:思路:贪心算法,每次选择观看最早结束的节目AC代码:#include <iostream>#include <algorithm>using namespace std;struct node{ int star; int end;};bool cmp(node a, node b){ return a.end < b.end;}node mv[105];int m

2021-09-02 17:11:02 122

原创 HDOJ 1050搬桌子

杭电1050搬桌子原题链接题目描述:思路:创建一个数组,赋初值为0,注意两个相对房间减一除以二数组下标才相等,输入两个房间号注意房间1可能会大于房间2,要交换一下顺序,每经过一个房间,该房间数组值++,房间经过次数最多的就是至少要花费的时间。AC代码:#include <iostream>using namespace std;int main(){ int t; cin >> t; while(t--) {

2021-09-02 16:54:30 162

原创 HDOJ 1052田忌赛马

杭电oj田忌赛马原题链接题目描述:思路:1.将田的最快的马和王的最快的马进行比较,如果田最快的马比王的快则比之2.如果田最快的马比王的慢,则将田最慢的马与王最快的马比3。如果田最快的马与王最快的马速度相等3.1将田最慢的马与王最慢的马进行比较,如果田最慢的马比王最慢的马快,则比之3.2如果田最慢的马比王最慢的马慢,则田的慢比上王的快3.3如果田最慢的马与王最慢的马速度相等,则田的慢比上王的快AC代码:#include <iostream>#include &

2021-09-02 16:34:44 300

空空如也

空空如也

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

TA关注的人

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