坑爹的第一题,我居然想了足足3个小时,而且还不确定是否正确. 于是,我就在这种情况下心惊胆跳的打了,好在ac了,否则就爆零了. 第二题,树形dp,本来差点就想到了正解,结果时间不够,没打完. 第三题,比赛上直接弃疗. 感想 首先强烈谴责出题人,输入开了10^6,我打了读入优化还调了半天才过,什么坑爹的题啊! 本来第一题是个水题,但是我却想了那么久,可能是因为我的基础打得不够扎实,基础训练不够,光顾着学习更高深的算法却忽略的基础的知识.…
题目 分析 首先,设\(f_{i,j}\)表示最大的以(i,j)为左下角的正方形的边长. 转移显然,\(f_{i,j}=\max(f_{i-1,j},f_{i,j-1},f_{i-1,j-1})+1\) 接着,再设\(g_{i,j,k,l}\)表示在以\((k,l)\)为左上角,\((k+2^i-1,l+2^j-1)\)为右下角的矩阵中,最大的f. 二维rmq就不讲了. 假设询问矩阵(x,y,x1,y1), 二分答案ans(想想为什么?) 用rmq看红色区域中的最大f值是否合法. 注意:出题人将…
题目 题目 20%算法 设\(f_{i,j}\)表示第i个节点选了j这个权值的方案数. 显然转移方程为,\[f_{i,j}=\Pi_{v=son(i)}(\sum_{k=1}^{j-k}f_{v,k}+\sum_{k=j+k}^{m}f_{v,k})\] 40%算法 接着上面的想法, 观察转移方程,发现,求和部分其实是两段连续的,那么将\(f_{i}\)求一个前缀和. 100%算法 观察\(f\)数组,发现其实\(f\)是对称的,而且中间的一段是相同的,设深度为x,那么前面就有\((x-1)k\…
题目 分析 发现,当子段[l,r]被取了出来,那么[l-1,r].[l,r+1]一定也被取了出来. 那么,首先将[1,n]放入大顶堆,每次将堆顶的子段[l,r]取出来,因为它是堆顶,所以一定是最大的子段,输出它,并将[l+1,r]和[l,r-1]放进堆中. 一共就只用做k次就可以了. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <c…
第一题,本来一开始就想到了数位dp,结果脑残地打了十几个转移方程,总是调试不出来,一气之下放弃了. 调第一题几乎调了整节比赛,第二第三都没它. 第二题连边找联通块. 第三题题解都打了三页,看都不想看. 总结 1.要坚持不懈,不能放弃.…
题目 给一棵n 个结点的有根树,结点由1 到n 标号,根结点的标号为1.每个结点上有一个物品,第i 个结点上的物品价值为vi. 你需要从所有结点中选出若干个结点,使得对于任意一个被选中的结点,其到根的路径上所有的点都被选中,并且选中结点的个数不能超过给定的上限lim.在此前提下,你需要最大化选中结点上物品的价值之和. 求这个最大的价值之和. 分析 设\(f_{i,j}\)表示在以i为根的子树中,选了j个节点(当j>0时,i节点必选). 转移就显然了,对于每个节点,与它的每个儿子分别做背包, 有个…
题目 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n个格子排成的一个环形,格子按照顺时针顺序从0 到n- 1 标号. 小胡观察到有m 个同学在跑步,最开始每个同学都在起点(即0 号格子),每个同学都有个步长ai,每跑一步,每个同学都会往顺时针方向前进ai 个格子.由于跑道是环形的,如果一个同学站在n-1 这个格子上,如果他前进一个格子,他就会来到0. 他们就这样在跑道上上不知疲倦地跑呀跑呀.小胡同学惊奇地发现,似乎有些格子永远不会被同学跑到,他想知道这…
题目 给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位. 由于答案可能很大,模10^9 + 7 输出. 分析 我们从小到大枚举i, 假设1~i-1位都是等于T的1~i-1位,那么第i位就要小于T[i], 然后在保证不用的个数等于k的情况下,i+1~n位就可以随便选. 细节很多,小心处理. #include <cmath> #include <iostream> #incl…
第一题用组合数各种乱搞,其恶心程度不一般.搞了很久才调对,比赛上出了一点bug,只拿了30分. 第二题我乱搞得出个错误的结论,本来自信满满60分,结果爆零了. 第三题,树形dp,在一开始的时候想到了,不过为了调对第一题,没有打出来. 感想 大翻车!只拿了30分,被虐的好惨. 我要再接再厉,战胜自我!…
第一题二分,在比赛上明明想到的方法,结果考虑的时候似乎漏了什么,被否决掉了. 只打了个水法,10分. 第二题,最长不上升子序列,原题,类似的题目做过两道,直接搞定. 第三题,一开始想了一种通过在树上打标记,记录剩下空房间的个数来处理, 结果细节太多了,放弃了.打了个暴力,有神奇的错了. 正解是通过每个点的优先值来维护一个堆. 总结 1.考虑方法要考虑全面,发现错误不能直接否决掉这个想法,要考虑清楚.…