自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 魔法优化

加在头文件前面#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize("Ofast")#pragma GCC optimize("inline")#pragma GCC optimize("-fgcse")#pragma GCC optimize("-fgcse-lm")#pragma GCC optimi...

2020-04-11 16:57:11 1101

原创 P1551 亲戚[并查集模板(rank优化+路径压缩)]

题目: 传送门大意: 有1 ~ n个人,现给定若干数对(x,y),表示x和y有亲戚关系。同时,关系具有传递性,即x和y有关,y和z有关,就会有x和z有关。现在要判断给出的若干数对的相关性,输出Yes或No思路: 使用并查集,也就是把有关系的数字放到若干个集合中,并从这些集合中随便选取一个数作为这个集合的标志,每个数 i 的标志保存在 pre[i] 数组中,于是查询时,只要看a和b所属集合的标志...

2020-03-13 22:15:10 190

原创 Dijkstra 模板(优先队列+vector存储图) O(mlog(n))

写成struct了#include<iostream>#include<queue>#include<vector>#include<algorithm>const int maxn = 1007;const int INF = 0x3f3f3f3f;using namespace std;struct Edge { int...

2019-12-07 17:08:48 227 2

原创 AcWing 1243. 糖果(状压dp)

传送门:传送门思路:用二进制来表示已经获得的糖果种类, 例如,现在有口味为1和3的糖,那么对应的二进制状态就是101,可以通过按位与运算合并101 = 001 | 100用dp[i]表示为了达到状态i所需购买的最小包数。状态转移的话,如从状态j借助a[i]转移到 j | a[i],对应为dp[j | a[i]] = min(dp[j | a[i]], dp[j] + 1)。最终的答案就是dp[(1 << m)-1]。Code:#include <bits/stdc++.h&

2022-02-12 17:39:36 499

原创 spfa模板

题目: 传送门Code:#include <bits/stdc++.h>using namespace std;const int N = 100010;const int INF = 0x3f3f3f3f;struct Edge { int f, t, d;};vector<Edge> edges;vector<int> G[N];bool vis[N]; // 标记是否在队列中int n, m;int dist[N];void

2022-01-22 13:28:05 287

原创 通过数组构建二叉树&遍历

#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;struct Node { int data; Node *lchild, *rchild; Node () { lchild = rchild = NULL; }

2021-12-18 16:02:36 666

原创 快速排序简易实现

Code:#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;typedef long long LL;int partition(int arr[], int l, int r) { int p = arr[l]; while (l < r) { while (l &

2021-12-11 16:52:41 201

原创 希尔排序(大跨度的对子序列的插入排序)

这里的子序列是每隔互质的数取出来的子序列,例如每隔5个取元素,每隔3个取元素,每隔1个取元素,得到三个子序列。#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <stack>#include <map>#include <queue>#include &l

2021-08-22 13:29:40 103

原创 折半插入排序

#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <stack>#include <map>#include <queue>#include <algorithm>using namespace std;typedef long long

2021-08-22 12:39:19 67

原创 直接选择排序

#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <stack>#include <map>#include <queue>#include <algorithm>using namespace std;typedef long long

2021-08-22 11:43:50 56

原创 递推打表组合数

递推打表组合数long long C[N][N]; // C[i][j]表示从i个物品里面取j个void init () { for (int i=0;i<N;i++) { for (int j=0;j<=i;j++) { if (!j) { C[i][j] = 1; } else { C[i][j] = (C[i-1][j-1] + C[i-1][j])

2021-08-09 00:33:44 79

原创 Proxmox 安装ifupdown2

直接这样安装会出问题,原因是使用了proxmox企业版的订阅源apt install ifupdown2换成非企业版的方法如下(默认会使用vi):rm /etc/apt/sources.list.d/pve-enterprise.listecho 'deb http://download.proxmox.com/debian/pve buster pve-no-subscription' >> /etc/apt/sources.list.d/pve-no-subscription.

2021-06-15 10:26:35 1319

原创 Pytorch 在训练过程中更改学习率

都知道在pytorch中是使用如下方式设置优化器的学习率lr的,但是要是想在训练过程中自己按照自己的学习率下降规则改变学习率该怎么办呢?optimizer = t.optim.SGD(model.parameters(), lr=lr)其实很简单,如下:def adjust_learning_rate(opt, epoch): # 自定义学习率下降规则(相当于每过opt.epochs轮, 学习率就会乘上0.1) # 其中opt.lr为初始学习率, opt.epochs为自定义值

2021-06-05 15:09:57 3524

原创 Tensorboard 画 loss 和 acc

class Logger(object): def __init__(self, log_dir): """Create a summary writer logging to log_dir.""" self.writer = tf.compat.v1.summary.FileWriter(log_dir) def scalar_summary(self, tag, value, step): """Log a scalar variabl

2020-12-28 13:50:33 411

原创 三层的全连接神经网络梯度数学推导

数据集:使用mnist数据集,每一个样本(x,y)(x,y)(x,y),xxx为原本为28*28,的灰度图像,对像素进行归一化后,reshape成(28∗28,1)(28*28, 1)(28∗28,1)的列向量,y原本是一个整数,表示该图片属于哪一类,对整数进行one-hot编码成一个(10,1)(10,1)(10,1)的列向量(只在整数的位置是1,其余位置都是0)一些函数:σ(x)=11+e−x\sigma(x)=\frac 1{1+e^{-x}}σ(x)=1+e−x1​σ′(x)=σ(x)⋅(1

2020-12-07 18:44:07 863 1

原创 线性筛 (欧拉筛)(求1~n之间的素数)

Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;typedef long l

2020-10-16 23:36:19 214

原创 kmp 模板

Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <map>#include <algorithm>using namespace std;typedef long long ll;typedef pair<int, int> P;cons

2020-10-16 10:46:46 63

原创 洛谷 P2196 挖地雷

原题: 传送门Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <queue>#include <map>#include <set>#include <algorithm>#include <sstream>us

2020-10-15 21:15:07 108

原创 P1434 [SHOI2002]滑雪

题目: 传送门思路: 记忆化搜索,这题不需要vis数组,因为满足要求的路径是高度严格递减的Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <queue>#include <map>#include <set>#include <alg

2020-10-15 18:13:55 81

原创 第十一届蓝桥杯7月场次b组 试题E: 矩阵

题目:把1 ~2020 放在2 *1010 的矩阵里。要求同一行中右边的比左边大,同一列中下边的比上边的大。一共有多少种方案?答案很大,你只需要给出方案数除以2020的余数即可。思路: 这题就是杨老师的照相排列的简化版,那题最多有5排,这题就两排。用dp[i][j]表示第一行放i个数,第二行放j个数的总方案数,状态转移方程为:dp[i][j]=dp[i−1][j]+dp[i][j−1]dp[i][j] = dp[i-1][j] + dp[i][j-1]dp[i][j]=dp[i−1][j]+dp

2020-10-14 20:28:58 987 7

原创 AcWing 271. 杨老师的照相排列

题目: 传送门思路: 易知1必须排在(1,1)处,且如果第一排已经排了a个人,第二排b个人,第三排c个人,第四排d个人,第五排e个人时(必须满足a>=b>=c>=d>=e),编号为a+b+c+d+e的人一定排在了这五排某一排的最右边,那么如果用dp[a][b][c][d][e]dp[a][b][c][d][e]dp[a][b][c][d][e]表示第一排排了a个人,第二排排了b个人,第三排排了c个人,第四排排了d个人,第五排排了e个人的总方案数,就可以写出状态转移方程了 dp[a]

2020-10-14 20:10:35 322

原创 AcWing 312. 乌龟棋

题目: 传送门思路:显然是个dp题目,那么第一步就是状态的表示,一开始我想用dp[i][j][k][l][t]dp[i][j][k][l][t]dp[i][j][k][l][t]表示当使用i张1,j张2, k张3,l张4后到达t所获取的最大分数,后来发现,一旦选取的4种牌的张数确定了,能到达的位置也就确定了,即到1+i+2j+3k+4l处(起点是1),那就用dp[i][j][k][l]dp[i][j][k][l]dp[i][j][k][l]表示 使用i张1,j张2, k张3,l张4到达1+i+2j+3k

2020-10-13 11:43:04 64

原创 7818 - 试题I:美味糖果 25

题目: 传送门思路:显而易见的想法就是暴力dp,dp[i][j]表示从前i个年货中取出j个的方案个数,那么应该有dp[i][j]=∑k=0a[i]dp[i−1][j−k],j−k>=0dp[i][j] = \sum_{k=0}^{a[i]}dp[i-1][j-k], j-k>=0dp[i][j]=∑k=0a[i]​dp[i−1][j−k],j−k>=0由于数据量大,不能直接写二维dp,注意到状态转移方程求i时,只用到了i-1,故可以使用滚动数组(注意更新dp[j]的先后顺序,不能用

2020-10-13 02:31:24 105

原创 2068. 整数拼接

题目: 传送门Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <map>#include <algorithm>using namespace std;typedef long long ll;const int maxn = 100007;in

2020-10-10 21:48:57 214

原创 AcWing 95. 费解的开关

题目 传送门简要思路: 枚举第一行所有的操作可能性(2^5=32),之后对于每一种情况下的第一行,用第一行下方的第二行的灯来把第一行里面是0的全部变成1,一直到最后一行。由于没有下一行来改变最后一行的0,1情况,所以若此时最后一行不全为1的话,就不满足题意Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector&gt

2020-10-09 22:10:40 78

原创 线段树(区间求和+区间更新)

题目: 传送门改进: 相较于单点更新,引入lazy数组,lazy[node] = val表示当前节点(node)维护的子区间全部都要加上val(可正可负)。lazy标记在区间更新和区间查询时下传(push_down)Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <map&g

2020-10-05 18:13:48 322

原创 Conscription POJ - 3723 (最小生成树+并查集)

题目: 传送门思路:把人看成点,征募花费看作边,那么就有一个无向图,因为当x和y关系是d时,在已招募x的情况下招募y的花费是10000-d,最小化花费等价于最大化d,故就是求“最大支撑树”(有V个节点,V-1条边,且边权重和最大),进而把d保存为-d,就转换成求无向图的最小生成树问题,直接套模板解决,注意,最后要用10000*V(人数)-最小生成树的边权和Code:#include <iostream>#include <cstdio>#include <cmath

2020-09-28 00:10:33 119

原创 Roadblocks POJ - 3255(dijkstra求次短路径长)

题目:传送门思路:仍然是用dijkstra,不过开两个数组,一个保存最短距离,一个保存次短距离,更新距离和dijkstra模板一样的。要注意的是,更新完最短距离dis1[e.to]时,原先的数据(也就变成了次短距离)要保存着。(就是代码里面的swap)Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>

2020-09-27 23:09:38 121

原创 Dijkstra求最短路径

Code:#include<iostream>#include<queue>#include<vector>#include<algorithm>const int maxn = 1007;const int INF = 0x3f3f3f3f;//无穷大using namespace std;struct Edge { int from, to, dist; Edge(int f, int t, int d):from(f).

2020-09-27 17:31:54 96

原创 利用python爬取琉璃✩

思路:利用requests.get() + 正则表达式 + 文件存储详见我的GitHub:https://github.com/risingsun1412/liulishenshe_crawler

2020-09-26 23:26:53 283069 11

原创 Bellman-Ford求单源最短路(不能存在负圈)复杂度O(|V|*|E|)

输入:第一行两个整数V(顶点数)和E(边数)下面有E行,每行三个数,表示相连的顶点以及边的长度(这里是无向图)7 101 2 21 3 52 5 102 4 62 3 43 4 24 6 15 6 35 7 56 7 9注意:核心代码:if (dis[e.from] != inf && dis[e.to] > dis[e.from] + e.cost) { dis[e.to] = dis[e.from] + e.cost; updat

2020-09-26 22:49:15 180

原创 POJ - 1182 食物链(并查集)

原题:传送门思路:对于动物i,i表示i号动物属于A类,i+N表示i号动物属于B类,i+2*N表示i号动物属于C类对于每一条信息,做如下处理:1: 通过并查集检查x和y+N的关系,x和y+2N的关系(x和y必须不存在吃与被吃,否则这条就是错误信息),合并x和y、x+N和Y+N、x+2N和y+2N2: 通过并查集检查x和y的关系,x和y+2N的关系(x和y必须不属于同类,并且y不能吃x),合并x和y+N、x+N和y+2N、x+2N和yCode:#include <iostream>#

2020-09-26 14:57:53 59

原创 [2018 NUIST 程序设计竞赛] P1553 抑郁的竹鼠

题目描述一只竹鼠正处在由 N × M 个房间组成的矩阵迷宫中,它需要尽快逃出去,否则可能会变得抑郁,然后被农华兄弟吃掉。为了描述方便,我们把左上角的房间的坐标定为 (0, 0),右下角房间的坐标定为 (N - 1, M - 1)。每个房间可能是 3种状态之一:开放的、关闭的、或者上锁的。开放房间用 ‘.’ 表示。竹鼠可以随意进入任何一个开放房间。关闭房间用 ‘#’ 表示。竹鼠永远不能进入一个关闭的房间。上锁的房间用大写字母 (‘A’, ‘B’, ‘C’, …)表示。在取得相应的钥匙前不能进入

2020-05-19 21:07:56 620

原创 数据库原理与应用第四版(何玉洁)p45~46的数据库建库代码

纯手打,求点赞!Code:CREATE DATABASE Student;USE Student;CREATE TABLE Student ( Sno INT PRIMARY KEY, Sname VARCHAR(20) NOT NULL, Ssex VARCHAR(1), Sage INT, Sdept VARCHAR(10));alter tab...

2020-05-08 15:26:31 888

原创 二维费用背包(模板)

题目: 传送门Code:#include<iostream>#include<cmath>using namespace std;typedef long long ll;const int maxn = 107;int c[maxn], v[maxn], w[maxn];//价值,体积,重量int dp[maxn][maxn][maxn];int m...

2020-04-24 23:31:34 225

原创 多重背包(模板)

题目: 传送门Code:#include<queue>#include<iostream>#include<vector>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;const int maxn = 5001;...

2020-04-24 22:40:36 458

原创 完全背包(模板)

题目: 传送门Code:#include<queue>#include<iostream>#include<vector>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;const int maxn = 1007;...

2020-04-24 22:39:03 439

原创 01背包(模板)

题目: 传送门Code:#include<iostream>#include<cmath>using namespace std;typedef long long ll;const int maxn = 1007;int c[maxn], w[maxn];int dp[maxn][maxn];int main() { ios::sync_wi...

2020-04-24 21:59:29 263

原创 试题I:村庄建设 25'

题目: 传送门思路: 给你无向图中n个节点,求最小生成树边权和,直接套Kruskal(优先队列+并查集)Code:#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>#include<vector&g...

2020-04-19 23:32:34 397

原创 C++ 快读

inline int read() { register int f=1, x=0; char c=getchar(); while (c < '0' || c > '9') { if (c == '-') f*=-1; c = getchar(); } while (c>='0' && c<='9') { x = x*10 + ...

2020-04-19 20:28:28 213

空空如也

空空如也

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

TA关注的人

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