题目:曾老oj
T1 2197
找规律80分,正解01背包
预处理1~n每个数的收益,然后以所求数N大小为代价上限,N所包含数n大小为代价,01背包求解
反思:什么题都往数学推导上靠(还写不出来),刷题少了一眼看不出来。(我太菜了!!!)
T2 2198
暴力60分,正解二分答案+前缀和+单调队列维护区间最大值
据说不算常数的情况下是O(n)的。每个数都减去二分所得答案,用单调区间确保当前长度为(l~r)的区间内队首可得收益最大,查看是否存在区间的区间和大于0.
反思:曾记得某gigo说过,一眼看不出来的题先考虑能不能二分
T3 2199
暴力都没写出来(我太菜了)
正解:依次增加最小边+并查集维护连通性+连通块判环
要使每个数的入度都为1,则最后所得图的每个连通块都有且只有一个环
依次增加最小边确保所到状态为最优解,并查集维护确保每个数的入度不大于1,同时也维护了当前块内是否存在环,连通块判环确保每个每个块只有一个环
合并两个并查集时,判断是否有环,即组成G的A和B中无论谁有环,G都会存在环,而当A和B都有环时,该边不能参与建图(任意连通块有且只有一个环)
最后记得用一个计数器统计入度为1的数的个数,若不等于你,则输出“No”
总结
刷题刷少了,过于依赖模板,不思变通(即我太菜了!!!)