2018.08.07【2018提高组】模拟B组总结

T1:【NOIP2017提高A组冲刺11.8】购物
T2:【NOIP2017提高A组冲刺11.6】拆网线
T3:【NOIP2017提高A组冲刺11.7】密室
估分:10+0+100=110
实际得分:20+0+50=70

T1:
首先,K 张优惠券或是全部用上,或是购买的物品不足 K 个,且所有的物品都用上了
优惠券。不妨先购买 Qi 最小的 K 件物品,然后将这些商品的 (Pi - Qi) 记录在小根
堆中,视为能够花费 Pi - Qi 重新获得一张优惠券,以此为根据,贪心即可。

比赛时打了个暴力,20分,竟然没有想到贪心,可能是最近听专题大部分贪心都是错的,于是就默认贪心不能用了吧…

T2:
30%:暴力枚举删除哪些边,然后验证即可。
50%:DP[i][j][k]表示当前子树根节点为 i,与子树中 j 个点相连,是否已经安排了 k 只企鹅。复杂度 O(N3)。
70%:考虑 DP。DP[i][j]表示 i 与子树中 j 个点相连,最多已经安排了多少企鹅。复杂度 O(N2)。
100%:
一条边可以用两只企鹅站,这样的一条点对,越多越好。
如果是 ans 对点,ans*2≥k,那么只需要 (k+1)/2 条边。
否则,需要 ans + (k-ans*2) 条边。
现在问题就转为求这样的点对有多少。
dp[i][0]表示以 i 为根的子树中能够两两配对的最大点数,不包含节点 i。
dp[i][1]表示以 i 为根的子树中能够两两配对的最大点数,包含节点 i。
转移方程:
dp[u][0]=Σv 是 u 的儿子 dp[v][1];
dp[u][1]=max(dp[u][1],dp[u][0]-dp[v][1]+dp[v][0]+2)。
最后 max(dp[1][0],dp[1][1])就是 ans 了。。

可以发现,当两只企鹅一起的时候(二元组),是最好的情况。那么我们就可以像办法让树中的父亲和儿子的匹配数量最多。如果比配后的节点数量小于给定的必须,那么就一个点,一条边的加就可以了。
匹配有很多种方法,这里使用贪心。我们可以知道如果从叶子下面结点开始匹配会比根开始匹配会更优。根据这条规律,我们就可以乱搞。但是我们并不可以很快的知道叶子结点是哪个下面的节点。但是看一下输入格式:
第二行N-1个整数,第i个整数Ai表示机房i+1和机房Ai有一根网线连接(1≤Ai≤i)。
我们就可以知道1这个点一定不是根。我们就可以从1开始然后乱搞。
需要注意:
I.如果点超过了限制(是好事),边不能加。
II.不要存成并查集,存成图。
III.用ask记录有没有匹配
IV.直接搜索不要介意
V.注意文件操作和数组范围
VI.时间复杂度:(),会被卡到第四页

考试时没有想太多,果断弃疗。

T3:
二进制+BFS。对我来说是一道大水题,但是考试的时候怎么只得了50分呢?原来是BFS的时候没有打标记数组,哎,想想就懊悔,打了这么多年的BFS竟然忘了要打标记,我也是醉了……

这次比赛让我知道了:
1.一定要想好到底使用什么算法,先屡清楚思路再开始打代码。
2.不会的题可以不用花太多时间,但是要想想能不能拿一点部分分。
3.对于有把握的题目一定要细心,不能放过任何细节,不然就会酿成像我一样的惨剧。
4.打BFS的时候一定要打标记!!!


作者:zsjzliziyang
QQ:1634151125
转载及修改请注明
本文地址:https://blog.csdn.net/zsjzliziyang/article/details/81490012

猜你喜欢

转载自blog.csdn.net/zsjzliziyang/article/details/81490012
今日推荐