- 博客(17)
- 收藏
- 关注
原创 2020蓝桥杯七月 REPEAT 程序
我们直接进入正题。(怎么可能)这是一道价值一千多行代码的题目!(手动滑稽)首先,愚蠢的我竟然想一行一行改成C++代码 (暴力解决一切) ,确实有点抽象,那我们看看该如何模拟。这么多行的循环嵌套,看上去好像没什么思路,一层套一层,但是我们想想一个数据结构 栈 ,每个嵌套子循环就相当于入栈,如果从子循环回到了父循环,那么我们就出栈。具体题解都在代码注释中。理论可行,闷头就冲!(唔~)#include<bits/stdc++.h>#define pi acos(-1)#define f
2020-10-16 20:23:07
424
原创 洛谷 P2016 战略游戏
题目链接题目大意给你一棵n个节点的无根树,每个节点可以放置一名士兵,放置的士兵可以看到所有与该节点相连的边,问最少需要多少名士兵可以使所有边都被看到。题解其实这道题和洛谷 P1352 没有上司的舞会很相似,那我们来看看这道题该怎么写。我们先假设0号节点是根首先一个节点只有两个状态,分别是放士兵和不放士兵,那我们分别看一下这两种状态对于子树有什么影响。这个节点放了士兵,那他的儿子节点就放不放士兵都可以了。这个节点没有士兵,那只有他的儿子放了士兵,他和他儿子之间的这条边才能被看到。于是我们
2020-10-15 20:09:15
143
原创 洛谷 CF414B Mashmokh and ACM
题目链接题目大意如果一个数列的每后一项都为前一项的倍数,那么这个数列为好数列,现在给出n和k,分别代表数列的最大值和数列的长度,求满足条件的好数列有多少种。初步思路首先这道题肯定是一道动态规划题,那我们想想该怎么规划,我一开始想到的是dp[i][j]表示最大数为i长度为j时的最优解,但是想了很久没想出状态转移方程 (可能是本龃龉太菜了) ,然后在那找规律,于是乎发现了新大陆 wu~ ,当我们在数列后加一个值为x的数时,他的贡献时多少呢?我们重新在看一下题目,只有后一项为前一项的倍数的时候,这个数列
2020-10-13 21:29:43
166
原创 洛谷 P1005 矩阵取数游戏
没错 本龃龉又来水题解了题目链接题目大意给你一个大小为n*m的矩阵,你将进行m次操作,每次操作可以拿矩阵中每一行两端的其中一个数字,每个数字只能拿一次。拿一个数字的贡献为该数字的权值 val×2^i (这个数是在第i次操作被拿走的),然后问在m次操作后最大贡献和为多少。思路这道题就很像一个执行了n次的区间取数问题,那么我们可以用区间dp去解决。dp[i][j] 中的i表示区间左端点,j表示区间又端点,dp[i][j] 整体表示当区间被取到 [i, j] 的时候的最优解。那么我们看看怎么样写转移
2020-10-12 19:34:03
187
原创 洛谷 P1198 [JSOI2008]最大数
题目链接如果还没看题目的可以先去看一下题目前置知识线段树这个题目就是两个操作,一个是添加数据,一个是查询区间最大值,但是由于数据范围达到1e5,所以我直接想到的就是线段树了,下面我们来看看线段树要怎么做。首先是建树,由于题目中的数据有负数,负数,负数,所以大家建树的时候一定要注意!!!初始化权值和懒人标记为-(1<<62)。然后是更新,这个就和普通的线段树更新一样,需要用到懒人标记的时候就向下更新懒人标记。最后是查询,也和模板线段树一样,遇到要更新懒人标记的时候及时更新懒人标记就好了
2020-10-11 22:42:33
99
原创 洛谷 P2564 [SCOI2009]生日礼物
题目链接题目大意有n个礼物,m种类型,每个礼物都有一个一维坐标,现在你要从中挑选出m个类型互不相同的礼物,使得m个礼物之间的坐标差的最大值最小化。思路首先,每个礼物有两个信息,一个是类型,一个是坐标。那么我们可以用一个结构体来存这个礼物信息。然后我们来看一个有趣的 方法,每个礼物不是有一个坐标么,那我们可以把他们先按从小到大的顺序摆在x轴上,然后我们用一个卷尺去量,坐标最小的礼物为第一个礼物,然后往后量,一直量到第一次包括所有类型的礼物。例如:假设一共有三种类型的礼物那第一次量的结果就是5
2020-10-09 22:34:21
142
原创 洛谷 P1396
题目链接题目大意有一个城市,有n个城镇,m条道路,每条道路都有一个拥挤值,现在你要从s城镇走到t城镇,求出从s走到t所遇到的拥挤值的最大值的最小值。思路这道题很像一棵最小生成树,但与最小生成树不同的是,他不是所有的点都需要用上,也就是说有一些城镇是不需要经过的,那我们只要在城镇s和城镇t第一次联通的时候,输出那条使s城镇和t城镇构成联通的边就好了。上代码!!!#include<iostream>#include<cstdio>#include<cstring&g
2020-10-08 19:51:19
190
原创 洛谷 CF701B
题目链接题目大意这里有一个n*n的棋盘,然后给出m次操作(xi, yi),每次操作会将经过(xi, yi)的点所在的行和列覆盖,最后输出每一次操作后剩余没有被覆盖的棋盘上的格子数。初步思路这很像一道矩阵覆盖问题,但是这次是一个十字覆盖,那么我们来看下这个和矩阵覆盖有什么共同点。首先一个十字架可以分解成两个有一条边为1,剩下那条边为n(拿个小本本记下来) 的两个矩阵,那么我们就可以把这个十字覆盖分解成水平方向的特殊矩阵覆盖,和竖直方向的特殊矩阵覆盖,那我们在计算的时候是不是就可以直接算水平方向上有多少
2020-10-08 19:31:44
91
原创 洛谷 P1825
题目链接题目大意给出一个n*m的矩阵,里面包含了起点位置和终点位置和所有传送门的位置,现在有一头牛在起点,他可以往上下左右四个方向行动,每行动一格将花费一个单位的时间,使用传送门不需要时间(传送门用大写字母A~W表示),传送门以一对的形式存在。最后就是输出从起点到终点所花费的最小时间。解题思路首先明确,这是一道广搜的题目,因为只用找一条从起点到终点的用时最短路。那么我们来考虑一下,本道题和普通的广搜迷宫有什么不同。显而易见,唯一的不同就是多了一堆双向传送的传送门,所以我们只要在输入的时候记录一下每一
2020-10-07 22:19:11
225
原创 洛谷 CF515B
题目链接题目大意Drazil 有许多朋友,有一些人是乐观的,而其他人则不然(未必就是悲观的),她决定帮助她的朋友们。她的朋友,有 n 个男生和 m 个女生,编号分别是 0 ~ n-1 和 0 ~ m-1。Drazil决定每一天邀请第i号男生和第j(j=i \mod m)号女生共进晚餐,(i=0,1,……)。Drazil觉得,乐观是可以传染的,即她认为如果有人是乐观的,那么与他(她)共进晚餐的另一个人也会变得乐观(当然,如果两个人都是乐观的或者都不是乐观的,则保持原样),而且这种状态也会保持下去。现在的问
2020-10-07 22:07:21
169
原创 洛谷 P1352
题目链接题目描述某大学有 n 个职员,编号为 1…n。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数 r[i],但是呢,如果某个职员的直接上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。初步思路首先这肯定是一棵有根树,然后我们就是要输出根节点去或不去的最大值。下面我们看看如何求这个最大值。首先,对于节点
2020-10-06 22:16:13
158
原创 洛谷 CF760B
题目链接皇家翻译输入n,m,k,n代表有n个床,m代表有m个枕头,你在第k个床位。现在每个床位至少要有一个枕头,并且相邻两个床位之间的枕头差不能超过1,最后输出你能得到的最多枕头数。初步思路显然在你床位两侧的枕头的分配规律是公差为一的等差数列。如果从正面出发,我们可以分四种情况PS(当k=1或者k=n时当前床位就是最左侧或最右侧床位,此时只用考虑另一侧床位的枕头排列即可)床位左侧的等差数列的首项(最左侧床位)是>1的,床位右侧的等差数列的首项(最右侧床位)也是>1的。床位左侧的等
2020-10-05 14:55:34
97
原创 洛谷 P2121
题目链接题目大意从原先给出的m条边中选出最多k条边,使得任意可到达两点之间的路径只有一条,最后要使整个图的权值和最大。最小生成树 (懂的大佬请自行跳过)我们先来看看什么是最小生成树。最小生成树是一颗任意两个节点之间只有一条路径,并且整棵树的权值和最小的一颗树。区别我们这道题是求整个图的最大值,所以我们只要把它当作一棵最大生成树就好了,只需要修改最小生成树的排序方式就好了。上代码!!!#include<iostream>#include<cstdio>#inclu
2020-10-04 19:39:06
119
原创 洛谷 P1853
其实这就是一道完全背包模板题,只不过多了一层n年的循环 dp[k] = max(dp[k], dp[k-a[j][0]/1000]+a[j][1])但是注意到题目中写了a是1000的倍数,那么我们可以趁机压缩一下dp空间,可以压缩到 40 * 10 * 1e6 * 1.1^40 / 1000。如果想要再优化的话可以注意一下,每年更新后的的总钱数sum中,小于等于上一年的总钱数lsum的dp[k],k from 1 to lsum 已经处于最优状态,所以可以直接从sum+1开始dp。(至于第一年.
2020-10-03 22:44:12
138
原创 洛谷 P1032
题目链接题目大意给出一对字符串s,c,然后给出多对字符串s1, c1…sn, c1。可以使s中的si字串转化为ci,问是否能在十次以内将s字符串转化为c字符串。初步想法因为这道题就是一个字符串s中的子串不停的被转换,直到变成c,所以我们可以模拟一遍他换的过程。也就是说,我们每遇到一个s中si子串,我们就进行替换,这个过程就有点像广搜,因为每一次替换都可能指向最终结果。优化因为是广搜,所以一直搜下去会有很多很多种情况,所以我们要合理剪枝。因为题目要求要在十次以内将s转换为c,所以我们可以记录每一次
2020-10-02 20:40:20
66
原创 洛谷CF816B题解
题目大意面前有n本咖啡书,每本书记录了一个温度区间,咖啡温度在这个区间内的咖啡即为好咖啡,现在给定一个k,如果有一杯咖啡的温度至少能被k本咖啡书的温度区间所覆盖,那么这个温度就是好温度。现在有q次询问,每次询问都会给出一个温度区间,你需要做的就是求出温度区间中有多少温度是属于好温度的。初步思路我们在每一次询问的时候,区间中的每一个温度都可以遍历一遍之前的所有咖啡书,然后算一下一共有多少本书的温度区间包括这个温度。当然这样肯定是不行的,因为数据范围达到了2e5,双重循环肯定就超时了。所以我们要尽可能去
2020-10-01 19:53:46
265
原创 洛谷P1004题解
洛谷P1004题解基本题意就是有一个大小为n的二维矩阵,从左上角走到右下角,选择两条路径,使得两条路径的权值和最大。大致思路如果这道题是寻找一条路径的话,那就是传统dp了,直接从左上角遍历到右下角,那么转移方程就是dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + a[i][j]dp[n][n]就是最终的最优解答案了。现在是寻找两条路径,那我们直接变成四维dp看上去好像就行了。dp[i][j][k][l] = max(dp[i-1][j][k-1][l], dp
2020-09-30 18:39:22
598
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人