刷题(嘤嘤嘤)
rising_sun2233
Never lose heart!
展开
-
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 · 503 阅读 · 0 评论 -
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 · 290 阅读 · 0 评论 -
洛谷 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 · 112 阅读 · 0 评论 -
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 · 84 阅读 · 0 评论 -
第十一届蓝桥杯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 · 992 阅读 · 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 · 334 阅读 · 0 评论 -
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 · 65 阅读 · 0 评论 -
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 · 109 阅读 · 0 评论 -
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 · 230 阅读 · 0 评论 -
AcWing 95. 费解的开关
题目 传送门简要思路: 枚举第一行所有的操作可能性(2^5=32),之后对于每一种情况下的第一行,用第一行下方的第二行的灯来把第一行里面是0的全部变成1,一直到最后一行。由于没有下一行来改变最后一行的0,1情况,所以若此时最后一行不全为1的话,就不满足题意Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>原创 2020-10-09 22:10:40 · 79 阅读 · 0 评论 -
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 · 129 阅读 · 0 评论 -
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 · 124 阅读 · 0 评论 -
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 · 65 阅读 · 0 评论 -
[2018 NUIST 程序设计竞赛] P1553 抑郁的竹鼠
题目描述一只竹鼠正处在由 N × M 个房间组成的矩阵迷宫中,它需要尽快逃出去,否则可能会变得抑郁,然后被农华兄弟吃掉。为了描述方便,我们把左上角的房间的坐标定为 (0, 0),右下角房间的坐标定为 (N - 1, M - 1)。每个房间可能是 3种状态之一:开放的、关闭的、或者上锁的。开放房间用 ‘.’ 表示。竹鼠可以随意进入任何一个开放房间。关闭房间用 ‘#’ 表示。竹鼠永远不能进入一个关闭的房间。上锁的房间用大写字母 (‘A’, ‘B’, ‘C’, …)表示。在取得相应的钥匙前不能进入原创 2020-05-19 21:07:56 · 645 阅读 · 0 评论 -
二维费用背包(模板)
题目: 传送门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 · 227 阅读 · 0 评论 -
多重背包(模板)
题目: 传送门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 · 472 阅读 · 0 评论 -
完全背包(模板)
题目: 传送门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 · 452 阅读 · 0 评论 -
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 · 267 阅读 · 0 评论 -
试题I:村庄建设 25'
题目: 传送门思路: 给你无向图中n个节点,求最小生成树边权和,直接套Kruskal(优先队列+并查集)Code:#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>#include<vector&g...原创 2020-04-19 23:32:34 · 402 阅读 · 0 评论 -
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 · 221 阅读 · 0 评论 -
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 · 1127 阅读 · 0 评论 -
牛客练习赛60 [A 大吉大利]
题目: 传送门思路:常规思路肯定是这样写for (int i=0;i<n;i++) for (int j=0;j<n;j++) { ans += arr[i] & arr[j]; }但由于n<1e5,O(n2)n<1e^5,O(n^2)n<1e5,O(n2)d的时间复杂度肯定TLE了我们把样例的1,2,3,4,5转为二进制,如下:001...原创 2020-03-28 00:58:28 · 103 阅读 · 0 评论 -
数列第N项 20 (矩阵 + 快速幂)
题目: 传送门题意: 已知数列递推公式为an=(3an−1+4an−2) mod 1e9 + 7a_n = (3a_{n-1} + 4a_{n-2}) ~mod ~1e9 ~+~7 an=(3an−1+4an−2) mod 1e9 + 7现在给你a1和a2,要求ana_nan思路:看如下矩阵乘法:(...原创 2020-03-15 11:48:30 · 235 阅读 · 0 评论 -
P2814 家谱(string + 并查集)
题目: 传送门思路: 用unordered_map<string, string> pre;保存父节点,就和int pre[];一样,不过这里是用stl的unordered_map自动的hash把字符串变成了整数(unordered_map比map快),然后套模板就行了Code:#include<bits/stdc++.h>typedef long long ll...原创 2020-03-14 01:29:27 · 275 阅读 · 0 评论 -
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 · 197 阅读 · 0 评论 -
迷宫 (统计最短路径的条数)
题目描述:现有一个30行 x 50列的迷宫,0表示空地,1表示障碍,你可以从第一行的任意位置(非1)出发,到达最后一行的任意位置(非1)就算通过迷宫,要求最短路径的条数迷宫:01010101001011001001010110010110100100001000101010000010001000001010100100001000000010011001101001010111101...原创 2020-03-02 23:38:08 · 818 阅读 · 0 评论 -
试题D:抽刀断水水更流,举杯销愁愁更愁 10’
写在前面: 原本应该dfs来做,但是吃饭时想到一个奇妙的方法,就写个博客记录一下题目: 传送门思路: 用0000000000000000000000(22个0)到1111111111111111111111(22个1)表示22个数字的取舍,一个for循环加判断就vans了Code:#include<iostream>#include<cstdio>#includ...原创 2020-02-29 20:35:38 · 1390 阅读 · 0 评论 -
[2017年第八届真题] 分巧克力
题目: 传送门思路: 二分答案,写个check函数,对每个mid进行检查可行性,结果再检查能不能切割出k块或以上的 l*l 的巧克力,不能的话,要-1Code:#include<iostream>#include<queue>#include<cstring>#include<cstdio>#include<cmath>#...原创 2020-02-27 19:17:59 · 952 阅读 · 0 评论 -
[2017年第八届真题] 青蛙跳杯子
题目: 传送门思路: 显然是搜索,然后题目要求求最小步骤,故用bfs注意: 我太菜了,原先bfs模板中的vis数组,我用map<string, bool> vis;代替了,然后时空复杂度就高了,不过还好数据不咋地,过了Code:#include<iostream>#include<cstring>#include<cstdio>#...原创 2020-02-27 14:32:41 · 187 阅读 · 0 评论 -
[2017年第八届真题] 小计算器
题目: 传送门思路: 用字符串读入数字,运算全部转成10进制,最后结果转会k进制就行了注意:题目运算过程出现的数非负,且小于2^63,所以要用long long读入数字和输出结果都要注意对数位上大于10的数用对应的字母替换注意当答案为0情况Code:#include<iostream>#include<queue>#include<cstring...原创 2020-02-26 21:47:12 · 387 阅读 · 0 评论 -
HDU - 2102 A计划
原题: 传送门题意: 地图有两层,除了墙壁(*),空地(.),起点(S),终点(P)外,还有传送门(#),走到传送门上时,会到达另一层的对应位置,不耗费时间,除此之外每移动一格花费一个时间,问最短时间是不是小于等于T思路: 直接bfs,只不过数组开三维的注意:当从队列里面拿出新的点时,如果这个点是传送门,那么直接令u.f = !u.f;,如果传送门对面也是传送门,那么就不要过去了,因...原创 2020-01-29 16:28:58 · 137 阅读 · 0 评论 -
NOIP2015 跳石头
原题: 传送门题意: 从N个石头(不含起点和终点)中去掉至多M块石头,使得从起点跳到终点的最小步长最大化思路: 用二分法从0 ~ L枚举最后的答案,如果可以在移动至多M块石头的情况下达成此步长,则继续往(l+r)/2 ~ L搜索,否则就往l ~ (l+r)/2搜索一直到l > r 为止注意: 把起点和终点也加进去,方便计算第一个石头到起点的距离和终点到最后一个石头的距离Code:#...原创 2020-01-22 17:09:46 · 218 阅读 · 0 评论 -
高精度加法(使用string)
思路: 定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和...原创 2019-12-23 14:43:45 · 346 阅读 · 0 评论 -
n皇后问题(dfs+剪枝)
原题:传送门题意: 给n x n的棋盘,放n个皇后,要求任何两个皇后不能在同一行或同一列或同一对角线上,按字典序输出所有方案思路: 用ans数组存储第i行皇后所在的列,这样就不存在两个皇后在同一行的情况了;用vis[i]记录第i列是否存在皇后,这样就不存在两个皇后在同一列的情况了;再写个check(int m)检查当前摆法的对角线的合法性,dfs搜索就完事了友情提示: dfs()返回后,一...原创 2019-12-12 21:50:51 · 876 阅读 · 0 评论 -
POJ - 2312 Battle City (bfs + priority_queue)
原题: 传送门题意: 给你一个地图,各字母含义如下:Y:你所在的位置T:目标位置B:砖头墙(先开炮打碎砖头,花费1,再通过,花费1,一共花费为2)E:空地(直接通过,花费为1)S:钢铁墙(不能走)R:小河(不能走)题目就是要求从Y到T的最小花费思路: 直接bfs套上注意: 由于存在花费不同的情况,所以需要用优先队列把花费小的放在前面注意: 由于存在花费不同的情况,所以需要用优...原创 2019-12-11 20:51:21 · 111 阅读 · 0 评论 -
HDU-2544最短路
原题:传送门dijkstra模板题注意:可能出现多个相同节点之间的不同权值例如:1 3 1001 3 503 1 20…我们取最短小的权值即可Code:#include<iostream>#include<string>#include<cstring>#include<cstdio>#include<algorit...原创 2019-12-07 00:55:02 · 77 阅读 · 0 评论 -
HDU - 1242
原题:传送门题意:"#“的格子不能走;”."的可以走,要1个单位时间;"x"的格子也可以走,不过要2个单位时间,求从r到a的最小时间思路:bfs搜索注意:不同于传统的bfs,这次走一个格子的时间可以是1或2,所以使用priority_queue<node>来存储,记得再结构体内重载<运算符,使得默认大根堆的优先队列变为小根堆#include<iostream...原创 2019-11-27 20:56:09 · 26054 阅读 · 0 评论 -
HUBUST-1143 泉水
原题:传送门题意:给一个地图,一个泉眼,求泉眼附近所有可以到达的高度不大于泉眼的点的个数(包括泉眼本身)思路:bfs直接搜索,这里注意,一定要在for循环内把vis[nx, ny]置为1,要不然可能会出现重复的情况(如果(i, j)比泉眼低,(i-1, j)和(i, j-1)也都比泉眼低, 那么在u=(i-1, j)时,cnt++了,在u=(i, j-1)时,也进行了cnt++)#in...原创 2019-11-26 21:42:54 · 268 阅读 · 0 评论 -
HDU-2717
原题:传送门题意:一维坐标,给定farmer位置n,cow位置k,求farmer到cow的最短走法。其中farmer有三种走法:1.从x到x+1 2.从x到x-1 3.从x到2x思路:bfs搜索即可,注意多组输入,注意搜索方向不能先是2x的,因为x=0时,也会step[0] = step[0] + 1;#include<iostream>#include<cstdi...原创 2019-11-26 19:27:54 · 133 阅读 · 0 评论 -
POJ - 3984 迷宫问题
原题链接:传送门直接上代码(注:在原问题上加了输出具体走法):#include<iostream>#include<queue>using namespace std;int n=5, m=5;int mp[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,...原创 2019-11-25 23:27:55 · 117 阅读 · 0 评论