自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AcWing 1027. 方格取数 算法提高课

题目大意:给定一个 n∗nn * nn∗n 的数组,从 (1,1)(1, 1)(1,1) 走到 (n,n)(n, n)(n,n) , 每次走到当前格子,取走当前格子里的数,当前格子里的数取走后就变成了0。现在(1,1)(1, 1)(1,1) 走到 (n,n)(n, n)(n,n) 走两次,所能得到的数字之和最大为多少。思路:此题是一个动态规划数字三角形模型,但是此题的难点就在于如何处理第一次已经拿走的数。设 f[i1][j1][i2][j2]f[i1][j1][i2][j2]f[i1][j1][i2

2021-10-24 11:17:30 149

原创 PAT甲级 1102 Invert a Binary Tree (25 分)

题目大意:一颗二叉树有 NNN 个结点,编号从 0∼N−10 \sim N - 10∼N−1,先给出每个结点的左右结点编号(如果左右结点不存在用 −-− 表示)。现在请你输出该二叉树的反转二叉树的层序遍历和中序遍历。思路:这是一道非常典型的数据结构题。因为根节点没有父亲节点, 我们先利用输入找出根结点。中序遍历的顺序是:左跟右, 那么反转二叉树对应原树中的顺序就是:右根左,然后利用 dfsdfsdfs 就能找出这个序列。同理,一般我们求层序遍历都是用 bfsbfsbfs, 因为广搜的性质就是按照半径来

2021-10-21 20:08:52 140

原创 2021 RoboCom 世界机器人开发者大赛-本科组(初赛)7-4 疫情防控 (30 分)

题目大意:给定一个 nnn 个顶点, mmm 条边的图,现在对图进行 ddd 次操作, 每次操作为标记编号为 ccc 的顶点不能走(即删除与 ccc 相连的边),每次操作中又有 qqq 次询问:编号 xxx 和 编号 yyy 之间是否有通路。思路:这个题目如果采用每次询问一次就遍历图,那么复杂度显然是 5∗10000∗1000∗10005 * 10000 * 1000 * 10005∗10000∗1000∗1000, 显然会超时。因此,这种暴力 dfsdfsdfs 模拟算法显然会超时。仔细一想,

2021-10-19 20:23:03 320

原创 2021 RoboCom 世界机器人开发者大赛-本科组(复赛)7-2 拼题A打卡奖励 (25 分)

题目大意:给定 NNN张打卡卷,第 iii 张打卡卷需要 mim_imi​ 分钟做完,完成后可获得 cic_ici​ 枚奖励的金币。问 MMM 分钟内最多可以得到多少金币。思路:显然这是一个01背包问题。但是,按照常规的想法,把时间看成是物品的体积,金币看成是价值,则 MMM 就是背包的容量。但是根据题目的数据范围, M(≤365×24×60)M(≤365×24×60)M(≤365×24×60) ,复杂度 NMNMNM (N<1000)(N < 1000)(N<1000) 肯定会

2021-10-18 20:07:58 460

原创 PAT甲级 1099 Build A Binary Search Tree (30 分)

题目大意:给出了一颗含有N个结点的树的结构,即每个结点的左子树编号和右子树编号,现在有N个数要放到这颗树的结点上,使之满足二叉搜索树的性质。思路:二叉搜索树的性质:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树根据性质和中序遍历的特点,即该树中序遍历(左根右)的结点的值一定是从小到大排序,只需将输入的结点值排序。然后我们可以根据中序遍历来重构这颗树,再利用bfs求得层序遍历。总体来

2021-10-14 19:47:04 88

原创 PAT甲级 1101 Quick Sort (25 分)

题目链接1101 Quick Sort题目大意:给定一个数组 aaa , 数组中有多少个元素 aia_iai​ 满足 aia_iai​ 大于等于左边的所有元素且 aia_iai​ 小于等于右边的所有元素。请输出满足元素的所有个数和元素。思路:求出两个数组 l[i]l[i]l[i] 和 r[i]r[i]r[i], 其中 $ l[i]$ 表示当前 iii 左边的最大值, r[i]r[i]r[i] 表示当前 iii 右边的最小值。然后依次判断就行了。代码#include <

2021-10-12 20:19:08 64

原创 Coderforces 1360F Spy-string

题目大意:给定 n个长度为m的字符串aia_iai​,能否找到一个字符串s,使得s串与aiaiai串至多存在一个不相同的字符。找出这样的字符串并输出它,如果没有找到则输出-1。思路:暴力枚举求解。每次把 a1a_1a1​ 的所有可能是答案的字符串给枚举一遍,然后判断这个字符串和 a2到ana_2 到 a_na2​到an​的串是不是满足条件。代码:#include <bits/stdc++.h>using namespace std;const int N = 15;int n,

2021-09-20 10:07:48 69

原创 第十二届蓝桥杯省赛第二场C++A/B组 负载均衡

题目大意:给定 n 台计算机和这 n 台计算机的计算力,现有 m 个任务需要被分配到这 n 个计算机上,每一个任务在 a 时刻被分配到编号为 b 的计算机上,任务消耗计算机算力为d, 耗时为 c。计算机处理任务需满足以下条件:1.当前时刻编号 b 计算机没有正在处理任务2.当前时刻编号 b 计算机算力大于等于任务所需要的算力要求输出每处理一个任务时当前计算机剩余算力,如果计算机处理不了当前任务,该任务直接舍弃。思路:1.要想计算机能够处理当前任务,首先在 a 时刻当前计算机已经处于空闲状态,说白

2021-09-17 08:58:15 315

原创 Codeforces 1381A2 Prefix Flip (Hard Version)

题目大意给定两个只含 0 和 1 字符串 a , b ,在下面这种变换规则下,a 经过多少变换次数得到 b,输出该次数并输出每次变换的位置,并且变换次数不超过2∗n2 * n2∗n。变换规则:选择字符串 a 的一个前缀,同时反转前缀中的位( 0 变成 1 , 1 变成 0 ),并反转前缀中位的顺序。例:a=01011a = 01011a=01011, 从第2个位置进行操作,先反转位,得到a=10011a = 10011a=10011,再逆序该前缀,得到 a=01011a = 01011a=01011。

2021-09-13 21:21:41 185

原创 Codeforces 1365D Solve The Maze

题目大意:在一个 n∗mn * mn∗m 的矩阵中,有空地、坏人、好人和墙。你可以将空地变成墙来堵住坏人。(n,m)(n, m)(n,m)为出口,是否存在一个方案使得矩阵中所有好人能够走到出口,而所有坏人不能通过出口,相应的输出YesYesYes 和 NoNoNo。思路:1.预处理:如果坏人和好人相邻,那么坏人一定可以走到隔壁好人,再通过好人的路径走到终点,所以不符合, 输出NoNoNo;​ 如果当前方格为坏人,我们只有将他四周都堵住,他才能不会走到出口, 即将周围空地变成墙。2.试想一

2021-09-12 11:15:30 86

原创 拓扑排序(topsort)的两个应用

应用一:检测有向图中是否有环,即将入度为0的点加入队列应用二:找出无向图中存在的环,即将度为1的点加入队列,剩下没入过队的点就是环上的点。bool topsort(){ int cnt = 0; queue<int> q; for(int i = 0; i < n; i++){ if(inDegree[i] == 0) q.push(i); } while(!q.empty()){ int u =

2021-03-28 10:17:40 327

原创 Floyd(弗洛伊德)算法

在看我这篇博客之前,请大家观看B站的视频Dijkstra,floyd算法动画演示讲解,这位up主讲的很好,然后你看模板代码,相信你会有所收获。 上篇博客我讲了Dijkstra算法,只要你理解了Dijkstra算法,那么Floyd算法就会变得很简单,无非就是求全员最短路问题,即,图中任何两个顶点的最短距离。原理:如果存在顶点 k ,使得顶点 i 和顶点 j 之间的当前最短路距离缩短,则使用 k 做为中转点,即由 i —> j 变为 i — k — j。表达式:如果dis[i][k] + dis[k

2021-01-23 17:38:38 180

原创 Dijkstra(迪杰斯特拉)算法

在看我这篇博客之前,请大家观看B站的视频Dijkstra,floyd算法动画演示讲解,这位up主讲的很好,然后你看模板代码,以及我给的例题,相信你会大有收获。1.Dijkstra算法Dijkstra算法解决的是单源最短路问题,并且边权只能为正值。//模板 int n, g[MAXV][MAXV];bool visit[MACV] = {false};int dis[MAXV]//起点到各点的最短长度 void Dijkstra(int s)//s为起点 { fill(dis, dis .

2020-12-15 17:51:11 199 1

原创 lower_bound 函数的C语言实现

题目大意:请实现有重复数字的有序数组的二分查找。输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一。样例输入:5 41 2 4 4 5样例输出3#include <stdio.h>#include <stdlib.h>int a[1000005];int main() { int n, m; scanf("%d %d",&n, &m); int i; for(i = 0; i < n; i++)

2020-12-13 10:20:21 1349

原创 LeetCode106. 从中序与后序遍历序列构造二叉树

做这个题之前推荐大家去看浙大柳婼的一遍博客:二叉树已知中序后序遍历重构二叉树根据一棵树的中序遍历与后序遍历构造二叉树。 注意:你可以假设树中没有重复的元素。例如,给出:中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:3/ \9 20/ \15 7class Solution {public: TreeNode* buildTree(vector<int&gt

2020-12-10 19:08:35 124 2

原创 LeetCode 515. 在每个树行中找最大值

您需要在二叉树的每一行中找到最大的值。示例:class Solution {public: vector<int> largestValues(TreeNode* root) { vector<int> ans; queue<TreeNode*> q; if(root != NULL) q.push(root); while(!q.empty()){ int n = q

2020-12-08 20:02:09 59

原创 2020年团体程序设计天梯赛 L2-4 网红点打卡攻略

2020年团体程序设计天梯赛 L2-4 网红点打卡攻略一个旅游景点,如果被带火了的话,就被称为“网红点”。大家来网红点游玩,俗称“打卡”。在各个网红点打卡的快(省)乐(钱)方法称为“攻略”。你的任务就是从一大堆攻略中,找出那个能在每个网红点打卡仅一次、并且路上花费最少的攻略。输入格式:首先第一行给出两个正整数:网红点的个数 N(1<N≤200)和网红点之间通路的条数 M。随后 M 行,每行给出有通路的两个网红点、以及这条路上的旅行花费(为正整数),格式为“网红点1 网红点2 费用”,其中网红

2020-12-06 21:53:22 361

原创 洛谷P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles

洛谷P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles此题是一个很经典的动态规划题目,对刚入门的同学来说是一个很好的练习题目。如果熟悉了解回溯法的同学,你会立刻发现这是一个动态规划题。思路:定义[i][j]为出发点时的能够得到的最大和,显然,在这个状态定义下,最大和的解为dp[1][1]。状态转移:从[i][j]出发有两种决策.一种是往左走到[i+1][j],此时需要求从[i+1][j]为出发点的最大和;同理向右走到[i+1][j+1],此时需要求从[i+1

2020-10-28 19:53:13 145

空空如也

空空如也

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

TA关注的人

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