02 2021 档案

摘要:原题链接 考察:搜索 思路: 这道题不需要找根,从头到尾搜索即可.因为最外层括号一定是最外层的递归,搜里层括号相当于搜索叶子结点.当搜索到|说明左结点已经搜索完毕,应当搜索右节点,而右节点也想当一个二叉树.直接dfs即可.这里的dfs不需要变量,因为不需要回溯. 1 #include <iostre 阅读全文
posted @ 2021-02-28 21:36 acmloser 阅读(65) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:最大公约数 思路: 设原序列为a1,a2,a3...an,公比为(q/p)t,题目给的样例是在a数组中随机抽取一些数,形成新序列 b1,b2,b3...bn,可以发现b2/b1 = (q/p)k1 b3/b1 = (q/p)k2 ,显而易见k1与k2都是t的倍数,对k求最大公约数就是 阅读全文
posted @ 2021-02-28 19:28 acmloser 阅读(71) 评论(0) 推荐(1) 编辑
摘要:原题链接 考察:dfs+约数 错误思路: 倍数法求出所有约数,N要开到1e9必然MLE且TLE 正确思路: 观察约数之和的式子 s = (1+p1+p12+p13+..)*(1+p2+p22+p23+...) ,要满足能够这种性质的数在1~2E9内较少.再继续观察,假设p全为2,(1+2)*(1+2 阅读全文
posted @ 2021-02-27 23:21 acmloser 阅读(63) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:唯一分解定理 思路: 很容易想到最长公共子序列,dp只能求出长度,不能求出个数.我们模拟样例,100的约数 2 4 5 10 20 25 50 100. 最长是4, 2 4 20 100也可以是5 10 20 100可以发现开始的数必然是素数,而序列可以表示成 2,2*2,2*2*5 阅读全文
posted @ 2021-02-27 19:30 acmloser 阅读(45) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 这道题和均分纸牌有点像,但是做法不完全一样 思路: 参考均分纸牌问题,考虑操作对前缀和数组的影响,可以发现每交换一次sum[i-1]变成了sum[i],而sum[i]变成了sum[i-1](0<i<n),根据取值范围可以发现i=0与i=n是不能交换的,所以我们只能分配sum[i 阅读全文
posted @ 2021-02-27 16:15 acmloser 阅读(69) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 错误思路一: 排序,加上n+1个较大值,减去m个较小值. m个减号不一定是全部用来减,可以利用两个减号a-(b-c)转化为a-b+c,如果a-b+c>a+b-c此思路就错误. 正确思路: 如果要凑最大值,那么需要()max-()min.但是这样的表达式看起来只需要一个+,如果我 阅读全文
posted @ 2021-02-27 02:04 acmloser 阅读(45) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 错误思路: 将两个负数作为一个数纳入新数组排序,从大选到小. 这个思路错在如果存在两个负数的积比一个正数大,而两个正数的积又比负数积大,这样会答案错误. 思路: 分类讨论 k为偶数,正数和负数都必须两个两个选,这里运用到了双指针算法.此时选出的答案一定为正数. k为奇数,此时负 阅读全文
posted @ 2021-02-26 23:23 acmloser 阅读(59) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 思路: 很明显付的钱尽量是花费钱的平均值.如果有人的钱<平均值mid,付的钱是他自己的钱,那么mid-a[i]就要钱>mid的同学补上.但是这里模拟补上比较复杂.当a[i]<mid时,付了a[i]的钱,要付的钱变成了s-a[i],在剩下n-i个人中,要让他们付s-a[i]的钱, 阅读全文
posted @ 2021-02-26 19:12 acmloser 阅读(68) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 一开始的思路是两两小岛构造一个半径为d的⚪,没做出来,⚪的交集太难求. 思路: 这道题的思路不是每个雷达覆盖尽可能多的岛,而是每个岛能被x轴上哪些点覆盖.对于每个岛求出它在x轴被覆盖的最小坐标和最大坐标,这样形成的区间就是能覆盖该岛的坐标区间.这样就转化成区间选点问题. 1 # 阅读全文
posted @ 2021-02-26 13:56 acmloser 阅读(63) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 与七夕祭是差不多的题目 思路: 有两种推导方式,一种是前缀和一种是解方程的方法推导. 主要是讲第二种方式,假设第一个人给第n个人x1个,第二个人给第一个人x2个,以此类推,最后ans = x1+x2+x3...+xn(每一个都是绝对值).假设所有人的糖果平均数是ax,可以得出方 阅读全文
posted @ 2021-02-26 11:37 acmloser 阅读(63) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 思路: 任何跨度>1的交易都能变成长度 = 1的交易.设价格 a,b,c. 假设a买入c卖出为最优解. 那么最大收益 = c- a = c-b+b-a.如果b<a,那么b买入更优,与假设不符.所以b一定>=a. 1 #include <iostream> 2 #include 阅读全文
posted @ 2021-02-25 23:16 acmloser 阅读(68) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:图论 思路: 一道和这极像的题目 212. 计数交换 但是计数交换比本题难多了.这道题关键在于发现将序列变成升序的次数就是环的长度-1.用a[i]数组记录第i个位置是什么数,可以发现i与a[i]之间能连成环.用dfs找环长度即可. 或者可以用贪心法,只要不在应该在的位置上就交换. 1 阅读全文
posted @ 2021-02-25 16:10 acmloser 阅读(80) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:双指针 思路: 很明显的双指针裸题,当i往前一步的时候,j要保持在与i在D的距离外. 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <set> 5 using namespac 阅读全文
posted @ 2021-02-25 15:51 acmloser 阅读(69) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:模拟 错误思路: 完全按题目意思走,暴力模拟.时间复杂度O(1010) ,TLE 正确思路: 压缩处理,记录商店上次处理的时间,用本次的时间-上次处理的时间-1,就是到本次时间该商店应该-1的次数,因为每次都是减去相同的数,所以可以压缩到一起.同理,在某一时刻可能会有多份相同的订单, 阅读全文
posted @ 2021-02-25 12:13 acmloser 阅读(92) 评论(1) 推荐(1) 编辑
摘要:原题链接 考察:模拟 这道题如果我自己写会写得超繁琐.... 思路: 飞行时间 = 到达时间-出发时间+时差(时差由东向西为减,由西向东为加).可以发现将两次飞行的时间相加再/2就能得到飞行时间. 这题注意记录sscanf的用法,在某些地方非常好用. 注意getline使用前一定要检查是否前面有换行 阅读全文
posted @ 2021-02-25 03:50 acmloser 阅读(65) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:模拟 没什么难度,主要是记录一下从0开始和从1开始计算行号与列号的区别 从0开始: 行 = n/w,列 = n%w 从1开始: 行 = (n-1)/w,列 = (n-1)%w+1 1 #include <iostream> 2 #include <algorithm> 3 #incl 阅读全文
posted @ 2021-02-24 23:16 acmloser 阅读(64) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:枚举 错误思路: 直接从a,枚举到b,如果不符合正常日期就continue 本蒟蒻TLE了,这方法可能有卡常大神能过吧... 正确思路: 构造回文日期,如果在[a,b]区间内就ans++. 注意的是0229这个时间,虽然9220属于闰年但是不要忘记考虑. 1 #include <io 阅读全文
posted @ 2021-02-24 22:17 acmloser 阅读(49) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:双指针 or 二分排序 or 前缀和 思路: n<=105 n2的时间复杂度也会超时,所以我们只能枚举一个数,这就必须要利用乘法原理求得答案,已知题目要求 ai<bj<ck如果我们枚举aior ck可以发现无法省略其他层枚举,而我们枚举b,c与a就能利用乘法原理,找到小于bj与大于b 阅读全文
posted @ 2021-02-24 19:50 acmloser 阅读(81) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:枚举 错误思路: 三层for循环暴力. 做多了区间dp...枚举区间只能想到按长度枚举区间,但这道题不能这么枚举..... 正确思路: 按区间端点来枚举区间,连号区间的特点是最大值-最小值 = 右端点-左端点.随着区间向右边延长,而动态记录最值. 1 #include <iostre 阅读全文
posted @ 2021-02-24 19:08 acmloser 阅读(56) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:模拟(?) 思路: 最关键的一点是要想到当两只蚂蚁碰面时,相当于它们穿过彼此.这道题两只蚂蚁只关心它们是否感冒,而不关心它们原本的序号. 再做一次WA了4次....注意一下坑点,我们只能感染与第一只蚂蚁同向且位置>第一只蚂蚁的..... 而且要判断到底能不能去感染右边的!!!! 1 阅读全文
posted @ 2021-02-24 15:52 acmloser 阅读(75) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:hash 思路: 正常是四重for循环枚举,但是由时间复杂度而言我们只能枚举2个数,此时考虑用空间换时间:预处理平方和. 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 using namespa 阅读全文
posted @ 2021-02-24 14:11 acmloser 阅读(83) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:二分 or 递推 思路一: 二分初始能量值,check函数检查即可.要注意的是每次E都+=E-h,也就是 E = 2*E-h. 2100000不管用什么数据类型都会爆,因此必须考虑别的做法:此时思路有二: 高精度,但是高精很慢,尽量避免高精 避开运算,在E一定满足条件就return 阅读全文
posted @ 2021-02-24 12:14 acmloser 阅读(80) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:找规律(?) 发现规律后代码超短..我还想复杂了... 思路: 第1项是k0 第2项是k1 第3项是k0+k1 可以发现指数和第n项的二进制排列相同..通过这个制造映射,求出答案 1 #include <iostream> 2 #include <algorithm> 3 #incl 阅读全文
posted @ 2021-02-23 22:28 acmloser 阅读(46) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:线性dp or 暴力枚举 思路一: 预处理前缀和,四个for循环枚举边界. 思路二: 55. 连续子数组的最大和 根据这道题的思路,f[i]定义为以i结尾的最大连续和,集合划分分为长度为1和长度>1, 当长度为1 状态转移方程为f[i] = a[i],当长度>1,说明至少包含i,为f 阅读全文
posted @ 2021-02-23 19:42 acmloser 阅读(45) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:STL(?) 思路: 最简单的做法:next_permutation 全排列. 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 const int N = 10010; 5 int a[N]; 阅读全文
posted @ 2021-02-23 15:50 acmloser 阅读(66) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:枚举 错误思路: 第一想法是两个对顶堆维护最大值和最小值,但是遇到这样的 0 2 21 0 19 的数据会出错.原因是当第一次修改a[n]与a[1]符合距离17后,与a[2]不一定符合距离17,但是题目约定只能修改一次a2+b2 <= (a+b)2这样会使得结果小了.同理每次sort 阅读全文
posted @ 2021-02-23 14:08 acmloser 阅读(64) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:唯一分解定理 这题不会,果然我是不配学OI的 思路: 易知只有当阶乘出现了2和5才能有一个0, 由唯一分解定理 n! = 2a3b5c....,当我们把n!的2和5的共同凑成10的因子全部除去后,再%10就能得到答案.这个答案为 2a-min(a,c)%10*5c-min(a,c)% 阅读全文
posted @ 2021-02-23 11:43 acmloser 阅读(122) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:模拟 思路一: 枚举每一年的每一月,看该月13号离1900年1月1日有多少天,对天数模7统计. 这里比较简单的做法是计算xxxx年x月的1日离1900年1月1日有多少天,再+12天就是13号离它多少天. 1 #include <iostream> 2 #include <cstdio 阅读全文
posted @ 2021-02-23 00:03 acmloser 阅读(42) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 思路: 6*6的箱子可以放下1个6*6、5*5、4*4,再用a[2]与a[1]填补空缺. 3*3需要分情况讨论,一个6*6可以放下4个3*3,剩下的可以用a[3]、a[2]、a[1]补. 1 #include <iostream> 2 #include <algorithm> 阅读全文
posted @ 2021-02-22 15:42 acmloser 阅读(44) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 思路: 手测几个样例可以发现:当n>3时,有两种策略: a[1]与a[i]过去,a[1]返回,a[1]与a[i-1]过去,a[1]返回,此时还未过去的人数-=2 a[1]与a[2]过去,a[1]返回,a[i]与a[i-1]过去,a[2]返回,此时还未过去人数-=2 本蒟蒻将最优 阅读全文
posted @ 2021-02-22 12:21 acmloser 阅读(28) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:递推 思路: 设f[i]是i与其他牛的噪音和,我们可以发现它与f[i+1]的关系是f[i+1] = f[i]+i*d-(n-i)*d(d为与i+1的距离).实际是指f[i+1]比f[i]多i个d的距离,而f[i]又比f[i+1]多计算了(n-i)个距离. 1 #include <io 阅读全文
posted @ 2021-02-22 03:13 acmloser 阅读(26) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 错误思路: 为了让利益最大,任务时间首先要尽可能大,在时间相同情况下,等级要尽可能大.采取双指针的类似思想,排序后从尾到头遍历,从m~1找到所能完成的任务数,如果机器时间或者等级<当前任务就continue 此思路错在如果最大时间的机器等级非常低,而完成任务的机器都排在后面就会 阅读全文
posted @ 2021-02-21 23:19 acmloser 阅读(50) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 这道题的贪心好难理解....在网上也没看到证明... 思路: 首先是洗衣服的时间,这时所有衣服的开始时间相同.用优先队列存储每个洗衣机,每件衣服都用耗时最少的,如果该洗衣机被选过一次,那么就相当于有一台t*2的洗衣机.由此算出每件衣服洗完的时间. 然后是烘干的时间.看了很多题解 阅读全文
posted @ 2021-02-21 17:56 acmloser 阅读(61) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心+模拟 错误思路: 预处理一遍>0的最小的数字和它在序列里出现的次数.在从头到尾遍历,讨论0与s[i]与minv的大小关系.用deque模拟 这样想其实没错,但是要讨论很多限制条件,看了别人的题解思路简单又快速... 正确思路: 从右往左找,找到除0外最小的数字,它右边的直接按顺 阅读全文
posted @ 2021-02-21 12:20 acmloser 阅读(61) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 思路: 最小数量很好求,从大到小贪心即可.关键是最大数量.我们要考虑全部取最小的剩下的还能否被表示的问题.直接取很难求,至少本蒟蒻没想出来怎么求. 我们求出C的最小数量后,可以发现剩下的是表示总钱数sum-C的最大数量.根据此我们可以求出sum-C的最小数量,剩下的就是最大数量 阅读全文
posted @ 2021-02-21 02:17 acmloser 阅读(31) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 思路: 贪心策略:从价值高的开始取,直到背包体积不够用. 乍一看很像背包问题,但是这里给的是单价,而背包问题是总体价值且不能分割. 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #incl 阅读全文
posted @ 2021-02-20 22:24 acmloser 阅读(37) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 错误思路: 用区间选点的模板处理,然后发现很难处理连续有重合区间与不重合区间....没在网上看到用这种解法的,基本都是下面的解法. 正确思路1: 将区间拆成两个时间点,到达时间增加人数,离去时间减去人数.将这些人按时间排序加减即可. 1 #include <iostream> 阅读全文
posted @ 2021-02-20 21:32 acmloser 阅读(56) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 大水题. 思路: 排序,从后往前加.每三个加一个最后的. 1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 阅读全文
posted @ 2021-02-19 23:37 acmloser 阅读(20) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间dp 递推思路: 套区间dp模板,划分集合的时候分为增加或者减少 f[i][j]为当前区间为[i,j]时变为回文串的最小花费. 就和密码脱离那道题差不多,if s[i] = s[j] f[i][j] = f[i+1][j-1]. else f[i][j] = min(f[i+1] 阅读全文
posted @ 2021-02-18 23:26 acmloser 阅读(47) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 错误思路: 将f[i][j]定义为达到此点的最大分数,结果是TLE. 正确思路: 和滑雪那道题一样,要将f[i][j]定义为从mp[i][j]出发的最大分数. 应该考虑记忆化搜索的优化原理是搜过一次就不要再搜 1 #include <iostream> 2 #includ 阅读全文
posted @ 2021-02-18 20:21 acmloser 阅读(43) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 错误思路1: 数组记录x与y的值,如果重复出现就判死循环. 审题,只有当x的值与操作在此前出现过才是死循环,y的值不影响循环,而单凭x的值也不能判死循环.因为可能进行的操作会不同.所以根据x与下一个操作才能判定一个状态. 错误思路2: for循环i-1遍,用bool数组记 阅读全文
posted @ 2021-02-18 18:39 acmloser 阅读(91) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp 思路: 设f[i][j]表示和为i,j==1表示经过了>=d的边,j=0表示未经过的方案数.以最后一步来划分集合,最后一步的和为i-j,此时边为j,那么状态转移方程是: if(j>=d) f[i][1] = f[i-j][0]+f[i-j][1] else f[i][1] 阅读全文
posted @ 2021-02-18 14:54 acmloser 阅读(56) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 思路: dfs模拟即可,用map判断当前数字出现过几次.但是回溯的时候要注意,如果本该有的数字没有说明被凑成了一对,但是恢复要恢复成1,如果有就要去掉这个数字. 本蒟蒻真的写得很繁琐,这位大佬利用位运算0 1的性质避免了判断2,很妙 GO 网上题解基本都用了步数作为参数, 阅读全文
posted @ 2021-02-18 02:17 acmloser 阅读(23) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 太菜了太菜了,说实话本蒟蒻完全没看出来为什么要用记忆化搜索.T了两次算了搞明白了点. 假定数据: a = aaa,b = aaa, c = aaaaaw. 很容易看出答案是错的,但是dfs会不断搜索,在返回的时候,用了b一个字符会在优先使用a一个字符.而此状态被搜索过,因 阅读全文
posted @ 2021-02-17 23:48 acmloser 阅读(56) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 15min内WA 6次,不愧是我 思路: 按题目意思走即可. 坑点: 记忆化数组的n必须开很大,否则WA.因为在m>0&&n>0内,m每减一次1,n就要累加一次和. 可能要开long long, 1 #include <iostream> 2 #include <cstr 阅读全文
posted @ 2021-02-17 20:31 acmloser 阅读(81) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 思路: 可用递推和记忆化搜索两种方式. 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #include <cstdio> 5 using namespace std; 6 const 阅读全文
posted @ 2021-02-17 19:46 acmloser 阅读(59) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp+约数 思路: 预处理约数之和,用倍数法,时间复杂度10^6次方左右,sum[i]<i的建立边.通过打表可知是不止一棵树,也就是数字建立的图是森林.对于遍历过的点标记一下,没标记的遍历即可.最后就是求树的直径. 倍数法中:j枚举了i的倍数 1 #include <iostre 阅读全文
posted @ 2021-02-17 18:18 acmloser 阅读(57) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp+二分 这道题正解思路有点像二分典型题搬石头.本蒟蒻是没想出来... 思路: 这道题有3个限制条件: 裁取的边要使得叶子不能到1. 裁取的边和要<=m 裁取的边的权值要尽量小. 直接递推根本递推不出来,如果设置叶子节点的f[u] = INF,那么叶子结点到父节点之间的边权值一 阅读全文
posted @ 2021-02-17 16:36 acmloser 阅读(47) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形背包dp 本来不想写这篇的题解,因为和前面的题重复了...但是WA了3次才对,还是写一下吧.. 思路: 将每20个虫子看成财宝的一个体积.m是背包的体积.这就是带体积的树形背包问题了.但是要注意的是,当某个洞穴虫子=0,我们还需要派人去拿.这个处理很简单,让f[u][0]=0就可 阅读全文
posted @ 2021-02-17 14:16 acmloser 阅读(49) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp 树的重心变种题 重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。(不止一个) 模板题 树的重心 思路: 把树的某个点删去后,剩余部分是不包含父节点的子节点连通块.已经删去点的父节点连通块.通过dfs可以求出 阅读全文
posted @ 2021-02-17 12:36 acmloser 阅读(40) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp 本蒟蒻是完全没思路,看了网上的题解思路普遍是: 对于一棵树,每拆掉一条边就形成一条链.对于一个有多子节点的结点u,我们可以保留父节点到u的边和u到一个子节点的边.也可以保留两个子节点的边去掉其他的边.看了大部分题解都是默认去掉父节点边是最优解. 本蒟蒻是没想出来证明 = = 阅读全文
posted @ 2021-02-17 01:22 acmloser 阅读(22) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp(?) 思路: f[i]表示i往下(包括i)的点权值和.对比学生总和sum-f[i]与f[i]的大小即可. 这题貌似和m没多大关系.m一定=n-1. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 阅读全文
posted @ 2021-02-16 22:19 acmloser 阅读(57) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp 关于本题的相关题目 10. 有依赖的背包问题 和 1074. 二叉苹果树 都是一个套路. 思路: 有依赖的背包问题套模板题.关于几点需要再修正: 绝对不要在dfs遍历连接点的时候+w[u].因为f[u][j] = max(f[v][k]+f[u][j-k],f[u][j]) 阅读全文
posted @ 2021-02-16 19:41 acmloser 阅读(82) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp 这道题战略游戏要求看到所有的边,本题要求看到所有的点 没想出来,参考了大佬的思路 照搬大佬的思路: 设树上某点u能被看见,这个点要么自己安插士兵,要么父节点安插士兵,要么子节点安插士兵.设f[u,st]表示u的st状态的最小花费.st==0时,它u被父节点看见,st==1, 阅读全文
posted @ 2021-02-16 17:22 acmloser 阅读(75) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp 思路: 因为要观察到所有的边,所以每条边上的点至少要放一个士兵,对于某子树的根u,f[u][1] = min(f[v][1],f[v][0]),f[u][0] = f[v][1]. md,我是zz,看成要看到所有的点,导致这道题我没想出来= = 1 #include <io 阅读全文
posted @ 2021-02-16 12:42 acmloser 阅读(75) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp 思路: 树形背包的时间复杂度是O(n3) 按划分给子节点的体积来分配集合.思路与苹果树大体相同.关于几个问题需要解释下: 为什么不和苹果树那题一样在遍历点的时候+w[u]. 答: k不一定能装下,会使得背包里的价值多了.除此之外,f[u][j] = f[u][j-k]+f[ 阅读全文
posted @ 2021-02-16 03:22 acmloser 阅读(27) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp 求保留边后树边权值最大和 思路: 因为选择子节点必须选择父节点,对于一个父节点u,它的两个子节点v1,v2.v1可以选择m条边,那么v2就能选择q-m-1-1条边对于每个一个树的结点,都能这样枚举,所以动态转移方程为f[u][j] = max(f[u][j],f[u][j- 阅读全文
posted @ 2021-02-16 00:42 acmloser 阅读(29) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp 1072. 树的最长路径 该题的延伸 思路: 上题求的是父节点往下的最大值+次大值.这道题求的是点与点的最大距离.这个可以是该点往下的最长距离,也可以是该点往上的最长距离.假设某点为根,往下的最长距离上一题已经求出.往上的最大距离是:到父节点的距离+max(父节点往下的最大 阅读全文
posted @ 2021-02-15 21:22 acmloser 阅读(85) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树形dp 思路: 从定义出发我们需要枚举所有路径,但直接枚举两个点直接的路径会超时,所以要分类集合枚举.已知树的路径一定会经过某个点,那么我们以点来分类集合.以路径的最高点来分类,经过这个点的最长路径 = 经过此点最长边+经过此点次长边.因此状态转移方程 f[u] = f[v1] + 阅读全文
posted @ 2021-02-15 16:40 acmloser 阅读(93) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 本蒟蒻是完全没思路...基本照抄大佬代码 照搬大佬的思路: 首先要知道包围两个点的最小矩形面积是两个点刚好在矩形的对角线上.根据这个我们构造n*(n-1)/2个矩形.对于每个点我们检查矩阵是否将它包含在内部,如果包含就记录下来.这样每个矩形都有它包含的点集.根据这个dp方程 阅读全文
posted @ 2021-02-15 01:08 acmloser 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp POJ 3254的延伸题 思路: 讲牛的需求看成看成肥沃的土地,也就是把谷仓看成一个矩阵.与牛的需求相符的位置可以养牛.这样就变成了POJ 3254差不多的题.f[i,j]表示前i头牛谷仓的养殖情况.状态转移方程是f[i][j] += f[i-1][k]. 这道题直接枚举i 阅读全文
posted @ 2021-02-14 22:12 acmloser 阅读(76) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 思路: 考虑到计算三角形,我们需要知道落脚点i和前一个落脚点j,所以需要三维数组.根据状态转移方程f[i][j][k] = f[i-{j}][k][t]+score很容易求出最大的权值.但是比较难想到怎么计算路径数目(对本蒟蒻而言).方法是再声明一个记录当前路径最大值的方案 阅读全文
posted @ 2021-02-14 18:28 acmloser 阅读(65) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 本题是731. 毕业旅行问题的延伸 思路: 与上面那道题不同的是每个点至少走一次,而不是只能走一次.普通的dp求出的是0到i点的最短距离(且每个点都经过一次),但这里我们还需要回程,也就是还需要求出i到0点的最短距离.我们手操可以发现ans=每个点都经过一次的最短距离+回程 阅读全文
posted @ 2021-02-14 13:07 acmloser 阅读(45) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 这个是AcWing 1064. 小国王那道题的扩展 思路: 这道题与小国王的区别在于前两行影响当前行.并且这道题我们求的是炮的最大数量.有几点必须说明: 不能效仿小国王开dp数组f[i,i行状态],如果这样写状态转移方程就是f[i,j] = f[i-2,k]+cnt[j]+ 阅读全文
posted @ 2021-02-14 02:13 acmloser 阅读(51) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状态压缩dp 这道题是 91. 最短Hamilton路径 的变种 思路: 很容易在优先级问题上陷入死循环(仅限本蒟蒻),实际上一开始做的时候,第一个汉堡要求食材必须是0,等同于从0点出发.设置f[0]=0,其他都=-99999999这样就可以避免样例给的死循环问题. 以i状态更新可以 阅读全文
posted @ 2021-02-13 19:20 acmloser 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 这道题的扩展题 91. 最短Hamilton路径 思路: 首先要处理这几点: 可以以任意点为出发点,也就是说初始化f[i点为1,其余点为0的状态][i] = 0. 预处理10位以内的3进制数. 设定f[i][j]为最后的落脚点为i,此时的状态为j.集合划分为倒数第二个点为k 阅读全文
posted @ 2021-02-13 16:20 acmloser 阅读(48) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 思路: 预处理连续1的状态,再处理能放在第i行的状态.递推时枚举pos[i]和pos[i-1]的状态即可. 注意: 位运算==的优先级高于& 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 # 阅读全文
posted @ 2021-02-13 13:05 acmloser 阅读(36) 评论(0) 推荐(0) 编辑
摘要:原题链接 原来蒙德里安的梦想和最短路径是两个状压的套路题型....蒟蒻落泪 考察:状压dp 思路: 参考蒙德里安的梦想,本题如果i行的摆放只与i-1行有关.也就是说设i-1行的摆放情况为a,i行为b.要满足这些条件:a&b=0,a无连续1,b无连续1,a|b无连续1. 预处理合法的状态.再枚举合法的 阅读全文
posted @ 2021-02-13 12:14 acmloser 阅读(80) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 时隔多年的复习233,还是做出来了 思路: 参考正常版的八皇后.我们需要标记左斜线,右斜线,已放棋子的列.在正常版我们是用数组记录,这里用状压dp可以用二进制位记录.所以三个变量now标记列,left是左斜线,right是右斜线.回溯不同于正常的dfs,正常的八皇后是用fo 阅读全文
posted @ 2021-02-13 00:10 acmloser 阅读(93) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:容斥原理+完全背包+计数dp 本蒟蒻是打死都想不到怎么用容斥原理... 错误思路: 乍看一下是多重背包,时间复杂度80*105*103(采用二进制优化)显然T了 正确思路: 采取完全背包预处理的方法,时间复杂度105 ,求出不限数量的取法.答案就是所有取法-不合法的取法.这里就可以想 阅读全文
posted @ 2021-02-12 17:23 acmloser 阅读(42) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间dp 这道题可以想到P4170涂色和Acwing 编辑距离的结合. 错误思路: 如果直接按a[i]==b[i]与a[j]==b[j]划分的话(实际上a[i]==b[i]与j可以合并),就会少了考虑b连续的条件.使得次数增加了. 错误思路2: 将a[i]==a[j]&&b[i]== 阅读全文
posted @ 2021-02-12 05:01 acmloser 阅读(58) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间dp 转移方程没想出来,思路参考大佬们的题解 错误思路: 本题主要难在[i,j]区间取走某一个数k时,我们要考虑继续往后取还是往前取,如果取前面的就只能取尾端,这就与我们一开始的子结构不符.所以此思路设置间断点划分集合行不通. 正确思路: f[i,]表示i~j人走花费的时间.考虑 阅读全文
posted @ 2021-02-12 02:16 acmloser 阅读(72) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间dp 这题没做出来,要不我还是别学OI了... 思路: f[i][j]表示[i,j]区间内取得的最小值.集合划分就是以中断点为标准,k = i+1,i+2...j-1...f[i][j] = min(f[i][k]+f[k][j]+a[i]*a[k]*a[j]) 为什么是a[i] 阅读全文
posted @ 2021-02-11 22:48 acmloser 阅读(30) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间dp+记忆化搜索(可有可无) 本蒟蒻是完全没思路...参考大佬的代码 参考大佬的思路: 参考括号匹配的dp题,这道题也是分为(())和()()型.但dp数组有所不同,根据()左右括号颜色的不同,里层或者断点f[i,k]会有不同方案数.以(())为例,14颜色的不同使得里层对应的方 阅读全文
posted @ 2021-02-11 21:02 acmloser 阅读(51) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间dp 区间dp的题想重写一遍,tm学了和没学一样,前几天都在睡,根本没刷题TAT 思路: 本道题要想到由局部最优解推导整体最优解,为什么能推到呢?首先f[i][j]表示[i,j]区间内要穿衣服的最少数量,在[i,j]区间内,枚举断点,由更小的最优解得到[i,j]区间的最优解.如果 阅读全文
posted @ 2021-02-11 16:24 acmloser 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间dp 思路: 和矩阵取数游戏P1005(本题的加强版)不能说很像,简直就是一模一样.f[l][r]区间表示卖掉[l,r]区间的最大收益,但是我们只能买两边的值,因此分为两类,卖l和卖r 1 #include <iostream> 2 #include <cstdio> 3 #in 阅读全文
posted @ 2021-02-11 13:44 acmloser 阅读(67) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间dp 思路: f[i][j]为涂色[i,j]区间的最少次数,按s[i]与s[j]的关系划分集合,如果s[i]!=s[j],我们枚举断点,f[i][j] = f[i][k]+f[k+1][j].如果s[i]==s[j],答案不是f[i+1][j-1]+1,这个方程不能处理全都相等的 阅读全文
posted @ 2021-02-11 13:23 acmloser 阅读(87) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间dp 思路: f[i][j]代表[i,j]合成后的最大值,根据题意,只有当f[i][k]=f[k+1][j]时,才能合并,即f[i][j] = max(f[i][j],f[i][k]+1).这道题求的是合并过程中的最大值,因此答案不一定是f[1][n]. 注意:根据题意,只有当a 阅读全文
posted @ 2021-02-11 02:16 acmloser 阅读(41) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间DP 思路: 与上题区别在于()是一类,()[]也是一类,两类需要分别处理,第一类和上题一样处理,分11 10 01 00(i,j是否在里面)讨论,第二类分为第一个括号序列和右边其他的括号序列,因为第一个括号序列无法表达,只能用包含它的f[i,k],所以第二类是f[i,k]+f[ 阅读全文
posted @ 2021-02-10 20:11 acmloser 阅读(72) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间DP+线性dp 思路一: 正向求解,f[i][j]表示[i,j]区间内应该删去的字符数.要注意的是如果i>j,那么为不合法区间,设置f[i][j] = 0.i = j,单个字符一定回文,f[i][j] = 0.接下来就是划分集合:s[i]=s[j]可缩小到f[i+1,j-1].如 阅读全文
posted @ 2021-02-10 15:49 acmloser 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间DP 这道题是能量项链的扩展... 思路: 在多边形内任取一条边,这条边一定属于某个三角形,划分情况随着三角形的顶点位置变化而变化.当选定一个三角形时,多边形被三角形分为两个部分,这两个部分是完全独立的,即f[i][j]表示的是i,j形成的多边形内划分三角形的情况,f[i][j] 阅读全文
posted @ 2021-02-10 10:58 acmloser 阅读(103) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:区间DP+dfs 关键在于想出怎么区间DP 思路: 根据石子合并那道题,f[l,r]是要合并的石子区间,那么这道题的f[l,r]是(l,r)区间内形成的二叉树,石子区间那道题集合的划分是根据隔板k的位置,那么这道题就是根节点的位置.要注意特殊的结点: 叶子结点,我们需要初始化叶子节点 阅读全文
posted @ 2021-02-09 00:08 acmloser 阅读(35) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:背包dp 错误思路: f[i,j] j表示和 此思路必错,会MLE. 正确思路: 需要转换式子.已知 x + x+d1 + x+d1 +d2+x+d1+d2+d3...=s 等价于 nx+(n-1)d1+(n-2)d2+.. = s. s与n已知,d在a与b徘徊,而x的范围太广,因此 阅读全文
posted @ 2021-02-08 13:46 acmloser 阅读(92) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:线性DP 思路: 最长上升子序列+01背包+数字三角形的综合 因为需要递增取数,所以必须记录上一个数是什么,从左上角到右下角,必须记录坐标,要求取k个数,必须记录取了几个数.因此需要四维数组 首先f[i][j][t][s]可以从上面和左面走来.到达一个新点,可以考虑取还是不取,取就是 阅读全文
posted @ 2021-02-07 22:20 acmloser 阅读(64) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:线性DP 和上道题其实是一样的题,区别在于这里要求是严格上升序列 但是转化一下就可以变成非严格上升序列: 非严格上升序列 b[i]-b[i-1]>=0 严格上升序列 b[i]-b[i-1]>=i-(i-1)//1是这么来的 因此变一下 b[i]-i>=b[i-1]-i+1即可 构造a 阅读全文
posted @ 2021-02-07 16:05 acmloser 阅读(71) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:线性DP 思路: 通过证明(dfs打表) 可以发现存在一个最优解,它的数字全部在A数组里出现过. 考虑根据最后一个数字设置状态转移方程,f[i][j]代表考虑前i个数,最后一个数字是a[j](b数组是非严格单调序列,和上题一样考虑,我们需要知道它的末尾值).f的属性就是和的最小值.去 阅读全文
posted @ 2021-02-07 12:11 acmloser 阅读(64) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:线性DP 本蒟蒻是完全没想到这个方程...思路基本照搬Y总 思路: 可以从题目分析出两个性质: 1.第i行人数一定>=第i+1行.(因为每列都要求递减) 2.每一行人数只能从左开始相邻放 行数最多5,可以考虑每行一个状态.设f[i][j][k][t][p]设置为第一行有i个人,第二行 阅读全文
posted @ 2021-02-06 23:01 acmloser 阅读(81) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:线性DP 最长上升子序列+最长公共子序列的综合版 思路: 要写这道题必须明白最长上升子序列+最长公共子序列的推导过程. 由最长上升子序列: 它的状态是由倒数第二个数字来分类,也就是说我们必须固定倒数第一个数字 由公共子序列: 有a[i]b[j]的有无来分类,f[i][j]代表1~i和 阅读全文
posted @ 2021-02-06 18:30 acmloser 阅读(70) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:线性dp 思路: 第一问是套模板. 第二问的思路是要想到增加序列个数的条件.由贪心法,我们求不上升子序列的组数.对于一个数x,假设已有两组a,b.如果a,b内没有比x更大的数.说明我们需要重新开辟一组.如果x较小,因为不允许插入,所以我们只能在末尾加入元素,我们要保证序列个数最少,就 阅读全文
posted @ 2021-02-06 14:41 acmloser 阅读(101) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:线性dp 题目本质:求最长上升子序列+下降子序列 易错: 这种题一般都要求下降子序列 j>=i,避免 100 100 100这种数据 也可以用朴素法求,但是要预处理长度数组. 1 #include <iostream> 2 #include <cstring> 3 #include 阅读全文
posted @ 2021-02-06 00:31 acmloser 阅读(63) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: 线性dp 错误思路: 先走一遍,将走过的地方mp标为0 这个算法本蒟蒻想不出来怎么实现.... 正确思路: 可以将两次走当作两次一起走.设第一次为A,第二次为B.只要步数相同,A和B的横纵坐标和就会相同.本来是需要4维数组,所以可以优化到三维. f[k][i][j]表示的就是到mp 阅读全文
posted @ 2021-02-05 17:46 acmloser 阅读(65) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:多重背包dp 坑爹题目,敲半天代码发现题目意思都弄错了 这道题的ai 不是i木块的高度和不准超过ai 而是i木块在整个电梯的高度不允许超过ai 我还奇怪为什么题解都没累加答案.... 这道题本蒟蒻不会用二进制优化..如果用了不知道怎么处理它属于哪个物品. 思路: 显而易见需要将木块按 阅读全文
posted @ 2021-02-03 17:17 acmloser 阅读(72) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:多重背包dp 实际上是考察多重部分和的问题. 在本题如果直接用二进制优化时间复杂度是108 会TLE.因此必须优化 多重背包问题中f[j] = 1是因为上一轮f[j] = 1或者本轮f[j-v] = 1.如果f[j]在枚举第i-1种硬币时就已经为1,那么f[j]在第i轮就没必要在赋值 阅读全文
posted @ 2021-02-03 14:02 acmloser 阅读(62) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:完全背包dp+线性代数 思路: 这道题其实是求给定a数组的极大无关向量组. 这里要能分析出一些性质: 如果(a,n)能被(b,m)所替代,那么a数组能被b数组表示 b数组中gcd>1的一对数,大的没必要存在 b数组是a数组的一部分元素. 假设b数组能表示a数组,且存在一个数x属于b数 阅读全文
posted @ 2021-02-02 18:38 acmloser 阅读(95) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:完全背包dp 思路: 写这道题需要有前置知识: 已知互质的数a与b,最大的不能由它们表示的数是(a-1)*(b-1)-1. 现在新加入数字c,不能表示的范围应该变小,因为>(a-1)*(b-1)-1的数都能被表示. 现在给出n个正整数,那么最大的不能由它们表示的数<10000. 确定 阅读全文
posted @ 2021-02-02 15:46 acmloser 阅读(84) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:完全背包dp 或者 打表 思路: 1.如果知道公式的话,三行代码就可以解决,答案是(n-1)*(m-1)-1.前提条件是n与m互质. 2.如果不知道,可以用暴力dfs打表.先固定一个数n,再看m变化时答案如何变化.eg:当n==3,ans在m情况下每次比m-1多2.最后说不定能推出公 阅读全文
posted @ 2021-02-02 15:33 acmloser 阅读(59) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:完全背包dp 人傻了,本来还想先用二维,结果没写出来,一脸懵逼看了题解.题解全是一维,最后发现是我f[i][j] = min(f[i-1][j],f[i][j-i*i]+1)的第二个i写成了i-1,板子背错了= = 这道题的物品体积是i*i,价值是1.这样才能算出个数来 1 #inc 阅读全文
posted @ 2021-02-02 12:26 acmloser 阅读(71) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:完全背包dp 思路: n可以看成体积为n,从1~n-1的数选的背包.因为f[i][j]代表从前i个数选,体积恰好为j的方案数. 感觉我代码刷新前后是一模一样的,刷新前是输出错误答案,刷新后又对了 = = 1 #include <iostream> 2 #include <cstdio 阅读全文
posted @ 2021-02-02 11:14 acmloser 阅读(58) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:01背包 错误思路: 把概率*100当作体积 此思路错在小数点不止两位... 正确思路: 参考上一题把牛的智商当作体积,这题可以把钱当作体积.从大到小遍历,如果当前的概率能逃脱就break出 但是这道题,概率应该用逃脱后的概率,如果用被捕概率应该是:前i家银行被捕概率是第一家银行被捕 阅读全文
posted @ 2021-02-02 01:25 acmloser 阅读(36) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:01背包 完全不会...是看大佬的题解. 自己空想了几个小时,还是要动笔啊!!! 思路: 这里有两个属性值,一个是智商,一个情商,而且没有体积等限制条件,只有智商和情商的限制条件.但是我们可以将智商和(或者情商和)作为体积值,这个背包的最大体积不是数据的牛的智商和,而是牛的最大智商* 阅读全文
posted @ 2021-02-01 22:57 acmloser 阅读(51) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:01背包 这道题懵逼半天,看了大佬的代码终于懂了点 思路: 这道题是和购买顺序有关的,我们先拿出最贵的菜,同时余额拿出5元,在剩余的余额尽可能买总和贵的菜.买完最后余额拿出的5元再买最贵的菜,这就是正解了.... 也因为这道题搞明白了点01背包的板子.f[i][j]表示在j余额条件下 阅读全文
posted @ 2021-02-01 18:08 acmloser 阅读(60) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:01背包 应该是简单题,毕竟连我这种lj都写出来了233 思路: 这道题是求方案数,不是取最值,因此我们是将模板的状态转移方程的max改成+,初始化的时候f[0][0] = 1,因为从前0个数选,和为0视为一种方法.(否则f数组一直是0)233 注意这道题不能取模,因为和需要恰好是m 阅读全文
posted @ 2021-02-01 15:53 acmloser 阅读(64) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:01背包dp 错误思路: 很容易想到f[i][j]代表最大值,i代表从前i个物品选,j代表此方案数量和的余数. 像之前的01dp模板题一样,先给f[i][j]赋值f[i-1][j],再是当j>=sum[i]%k时再赋最大值. 错误原因已在注释标明 1 for(int i=1;i<=n 阅读全文
posted @ 2021-02-01 15:10 acmloser 阅读(66) 评论(0) 推荐(0) 编辑