随笔分类 -  luogu

摘要:P1944 最长括号匹配 f[i]表示以s[i]为结尾的最长规范括号序列 s[i] = ( || s[i] = [ 时 f[i] = 0 s[i] = ) && s[i - 1 - f[i - 1]] = ( 时 f[i] = f[i - 1] + 2 + f[i - 2 - f[i - 1]]] 阅读全文
posted @ 2022-02-08 12:04 yys_c 阅读(27) 评论(0) 推荐(0) 编辑
摘要:**题意:**给你一个不降序序列(序列长度N),然后让你求能够组成的最大的不超过c的值是多少 一开始想的是价值和重量相等的01背包问题,但是发现c的范围是有符号整数[231,2311][231,2311] 改用暴力,基本方法是二进制枚举,但是需要一些剪枝: 如果中间发现sum > c 就return 阅读全文
posted @ 2021-09-27 16:17 yys_c 阅读(52) 评论(0) 推荐(0) 编辑
摘要:暴力出全排列然后求出这种放油的顺序得到的覆盖面积,求所有覆盖面积的最大值,实际做的时候ans保存的是所有半径的平方的和的最大值。 在放一个油滴A的时候,需要和之前放下的油滴B一一比较,如果A和B的距离小于B的半径,那么放不了,否则可能的半径为r(A)=dist(A,B)r(B)r(A)=dist(A,B)r(B),和所有点比较 阅读全文
posted @ 2021-09-27 13:07 yys_c 阅读(54) 评论(0) 推荐(0) 编辑
摘要:经典八皇后,需要用一些标记数组优化对角线、横线 以n=6为例,主对角线(黑)和副对角线(红)各有11(2n-1)条,需要判断一个点(x,y)(x,y)所在的对角线 公式:idxred=y+x1,idxblack=yx+nidxred=y+x1,idxblack=yx+n #include<iostream> usi 阅读全文
posted @ 2021-09-27 12:55 yys_c 阅读(52) 评论(0) 推荐(0) 编辑
摘要:题意:有一个网格图,机器人只能顺着网格的格点走,开始的时候机器人在某一个网格的左上角点上,然后给出机器人初始时面朝的方向(东、南、西、北),然后给出终点(也是某一个网格的左上角点)的位置,然后让你求从机器人当前位置到终点最少需要多少秒。 其中机器人的操作有(分别都是花费1s): 向前走1步 向前走2 阅读全文
posted @ 2021-09-25 10:18 yys_c 阅读(97) 评论(0) 推荐(0) 编辑
摘要:一开始写的**最大生成树,但是没有注意到题目要求每一个石头只能跳一次**,如果生成树长下面这样就不对了(从0开始跳,这个不可能是一次跳完的路径) 所以说,只能用贪心,贪心有几种方式,一种是升序排序,然后再高低来回跳就行了,另一种是建无向图跑最长路,最开始是直接dfs+贪心过了,然后用了dijkstr 阅读全文
posted @ 2021-09-20 20:23 yys_c 阅读(40) 评论(0) 推荐(0) 编辑
摘要:哈夫曼编码之后做的第二个贪心题... #include<iostream> #include<algorithm> using namespace std; const int N = 5010; #define PII pair<int, int> #define int long long PI 阅读全文
posted @ 2021-09-18 19:14 yys_c 阅读(41) 评论(0) 推荐(0) 编辑
摘要:暴搜+剪枝,在打素数表的时候,要注意一下题目的空间范围是500MB(超大...),可能可以打1e8以内的素数表,打表用的是线性筛,空间是4108210242763 MB4108210242763 MB,然而还是过了 另外还有一个奇坑无比的坑点:1不是素数... #include< 阅读全文
posted @ 2021-09-18 13:18 yys_c 阅读(52) 评论(0) 推荐(0) 编辑
摘要:找最大值:二分到一个n的值t,然后根据日志检查在t的情况下能切几题,如果满足切的题目数>=k,那么所有比t小的值都能够使得切题数>=k,此时可能可以找到n的最大值,因为如果不存在一个t能使切题数正好是k的话,找到的值是最大的能够使切题数>k的值 找最小值:二分到一个n的值t,如果满足切的题目数<=k 阅读全文
posted @ 2021-09-17 18:13 yys_c 阅读(35) 评论(0) 推荐(0) 编辑
摘要:暴力的话,就是两重循环,然后挨个去判断能不能满足,复杂度O(mn)O(mn),过不了 **思路:二分答案,对于二分到的一个值x,去检查能否满足前x个(包括x)订单,如果能满足,说明前y(y<x)个订单都可以满足,所以可以二分到最大的可以满足到**的订单,但是题目要的是第一个不能满足的订单,所以需要在二分过 阅读全文
posted @ 2021-09-15 18:26 yys_c 阅读(85) 评论(0) 推荐(0) 编辑
摘要:一开始的想法是二分|sy||sy|的值t,然后根据二分到的值,看是否能够找到一个W,使stys+tstys+t,并且答案具有二段性,因为如果对于t能够找到一个W使得满足条件,那么所有比t大的值,都能够满足存在W使得stys+tstys+t,所以满足二段性,由于是整数二分,一 阅读全文
posted @ 2021-09-13 20:45 yys_c 阅读(88) 评论(0) 推荐(0) 编辑
摘要:暴力方法是把所有路径全部跑一遍,现在只考虑(0,0)(0,0)位置的门分别走向第n - 1行的所有门的路径,假设只向上向右走,那么(0, 0)到(n - 1, k)的路径条数为CnkCnk,所以从(0, 0)到第n - 1行所有的门的路径条数总和为$C_{n}{0} + C_{n}{1} + . 阅读全文
posted @ 2021-09-11 16:41 yys_c 阅读(44) 评论(0) 推荐(0) 编辑
摘要:尝试了几次,复杂度为O(R(nlogn+n))O(R(nlogn+n)),分别用了每轮快排和归并排,极限时间约为50200000175020000017,时间限制0.5s,TLE。 **思路:**首先按照题目要求把运动员序列a排序,让他们按照1 vs.2,3 vs.4...1 vs.2,3 vs.4...的方式比下去然后发现每一轮下来整 阅读全文
posted @ 2021-09-07 16:29 yys_c 阅读(147) 评论(0) 推荐(0) 编辑
摘要:这题开始想用循环做,WA了三发,想得太简单了,没有想到有这种情况的嵌套: F ... F ... E F ... E E 所以改用递归,dfs()返回下一层的时间复杂度(下一层所有并列的F中复杂度的最大情况) **注意:**有一个特殊情况就是在出现F i x y当x比y要大的时候,这个循环(不管他里 阅读全文
posted @ 2021-08-25 18:35 yys_c 阅读(123) 评论(0) 推荐(0) 编辑
摘要:一开始直接将题目按照字面意思翻译成dp,没想太多T了4个点... f(i,j,k)f(i,j,k)表示摆好前i盆花,最后一种花是j,并且摆了k盆的所有摆法的集合,那么状态计算就是 f(i,j,k)=j1u=1auv=1f(ik,u,v)f(i,j,k)=j1u=1auv=1f(ik,u,v),极其复杂 阅读全文
posted @ 2021-07-24 16:51 yys_c 阅读(68) 评论(0) 推荐(0) 编辑
摘要:**题意:**给你一个含有n个结点的树(无向无环图,这个条件非常重要),判断能否按照每组k个结点,将其分成n/k组,并且要求每组仍然连通 **结论:**如果一个树可以被分成满足以上条件的组,那么从任意一个点出发(以任意一个结点为根)都可以将树按照上面的条件分块,并且分法唯一 将树按照无向图存储(保证 阅读全文
posted @ 2021-07-23 19:40 yys_c 阅读(125) 评论(0) 推荐(0) 编辑
摘要:大整数+快速幂 复杂度O(500500log(p))O(500500log(p)) 其中,位数的计算方法: 由于2p2p最低位不会是0,所以2p12p12p2p有同样的位数,由于10x10x的位数为x+1x+1,所以令2p=10x2p=10xx=log102p=plog102x=log102p=plog102,所以位数为$p*\ 阅读全文
posted @ 2021-07-21 21:56 yys_c 阅读(232) 评论(0) 推荐(0) 编辑
摘要:标记一下空格和数字,然后遍历整个数组,顺便深搜,求出满足条件的数字个数加上空格连通块个数 #include<iostream> using namespace std; const int N = 1010; #define block 1 #define num 2 int g[N][N]; in 阅读全文
posted @ 2021-07-19 16:27 yys_c 阅读(85) 评论(0) 推荐(0) 编辑
摘要:类似于开关问题的二进制枚举,二进制枚举第一行的情况,那么第二行的选择情况会受到上一行的限制,并且还需要保证本身不存在相邻的数字,这样一直枚举到最后一行比较一下选择数字的和,存一个最大的答案就可以了,复杂度O(2mn)O(2mn) #include<iostream> using namespace std 阅读全文
posted @ 2021-07-19 15:34 yys_c 阅读(71) 评论(0) 推荐(0) 编辑
摘要:由于1v25,1g151v25,1g15,数据范围比较小,所以可以枚举出所有饲料的选择情况(215=32768215=32768),再取其中字典序最小的,饲料种数最少的方案 #include<iostream> #include<vector> using namespace std; co 阅读全文
posted @ 2021-07-19 14:29 yys_c 阅读(79) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示