2020.01.13【NOIP提高组】模拟A 组总结

估分:60+100+60=220

实际:0+90+60=150

T1:3804. 【NOIP2014模拟8.24】小X 的AK 计划

观察到每个点的贡献是一样的,因此可以想到如果没有数轴的限制的话,我们就直接用t[i]从小到大选,那么因为最优路径是不往回走,那么其实枚举一个最后的点之后,在前面比x小的数中从小到大选择就可以了,那么我们可以从小到大枚举最后的x,那么剩余的距离就是m-x,再对于前面的点维护小根堆,之后不断取出最小值直到不能取为止。但是我们发现有可能随着x的增大,取出的数有可能再后面排不到前若干小的数,这样我们在堆中的数都是剩下的不要的数,这样不好维护,因此考虑维护一个大根堆,堆中的数全部表示选择的数,并维护一个sum,当一个数t[i]加入sum中如果花费时间<=m那么就加,不能加就用堆中最大元素替换这个t,表示不选最大的t,而选择了当前的t,最后用堆中元素个数更新ans即可。

当然你也可以用权值线段树线段树,离散化后每个位置存下区间t的总和以及x的个数,log搜索一遍更新也可以。

其次,对于log^2的算法,可以用树状数组维护在当前x之前从小到大的时间的和,然后二分查找一下满足条件(<=m-x)的位置,再查询选的个数即可。

考试时想到用dp,却没有想到贡献是一样的,不用dp。

T2:3805. 【NOIP2014模拟8.24】小X 的二叉堆计数

第一眼还以为是斯特林数,但仔细一看其实不是。它的堆的形态已经确定,所以我们很容易可以得到递推式f[i]=\binom{i-1}{li}*f[li]*f[ri](其中l[i]表示左子树的儿子个数,ri是是右子树)

表示第一个对顶元素已经确定后,任意选择li个数放到左子树,剩下的数放到右子树后,再乘上左子树和右子树的形态的方案数就是答案。

最后答案是f[n]*2,有大小根堆。

其实也不算很难,但是考试时没有特判n=1的情况,这种情况大小根堆是一种情况。

下次应注意。

T3:3806. 【NOIP2014模拟8.24】小X 的道路修建

对于60pts,枚举最小边,从这里开始做最小生成树,由于最小生成树最大边最小,可以保证是最优答案。

对于100pts,我们发现我们每次都做了一遍最小生成树,其实没有必要,我们从大到小枚举最小的边后,我们需要做的世纪上是在没加入一条边后,维护出当前图的最小生成树,那么当加入一条边时,我们考虑它是否与之前的边构成环,如果构成环,就将环上最大边删去,用当前这条较小边代替一定更优,如果不构成环,就直接加入边中。找环中最大边可以用 DFS 实现。 若图中现有的边数为 n − 1,我们就可以更新答案。 时间复杂度 O(m log m + mn),期望得分 100 分。

但是考试时有没有想出来,就只拿了暴力的60pts,当然也可以用LCT做。

总结:

多多反思,掌握解题思想方法,继续加油。

发布了199 篇原创文章 · 获赞 201 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zsjzliziyang/article/details/103963058