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

估分:100+30+0=130
实际得分:20+30+0=50

第一题:4671. 【NOIP2016提高A组模拟7.20】World Tour
首先预处理出每个点到其他点的最短路,这是都能想到的
暴力:N^4枚举四个点,更新答案
优化:能不能只枚举两个点呢?如果只枚举两个点的话,那么这两个点的距离我们是可以知道的,剩下两个点只能预处理,怎么办呢?我们可以预处理出每个点能到达的点以及哪些点能到达这个点,并且按照距离远近排个序,这样就可以比较了。

但是,比赛时因为理解的问题判了一下自环的情况,原来是不用判的,因为每次走到的边都是最短路!!!

第二题:4672. 【NOIP2016提高A组模拟7.20】Graph Coloring
总体思想是分别检查将边变为蓝色,或者红色,然后取最优方案即可。

每一个点最多改变一次,因为改变两次等于没有变化。因此我们要将点分为两 个集合 S 和 T,分别代表要改变的点和不需要改变的点。如果我们现在要将所有边变为红色,假设 u 和 v 之间有一条红色的边。如果要维持这种颜色,u 和 v 要属于同一个集合(S 或者 T)。另一方面,如果这条边是蓝色,那么 u 和 v 就必须在两个不同的集合。 于是问题简化为了 0-1 图染色问题,我们可以通过 DFS 或者 并查集 解决。之后我们还知道一个性质:就是将所有的要改变的点和所有不用改变的点互换(即要改变变成不用改变,不用改变改成要改变),我们发现都不会影响结果(最后变为所有颜色都相同),所以我们只要取要改变的点数和不要改变的点数的最小值即可。因为图不一定连通,所以有一些细节要注意。

比赛时看到这个题目好像似曾相识,以前应该都做过这种题,但是却忘了。。。只好打了个2^N的暴力。

第三题:4673. 【NOIP2016提高A组模拟7.20】LCS again
oj给出的题解是dp,但实在不知道怎么做,就用了另一种方法。
相当于让你删掉一个数再插入一个数,求不同序列的方案。
首先删掉一个数后,原序列有n个空,在这n个空里任意放m中字母,方法一共是N*M种,但是同一个字母放在相同的字母的前面和后面是一样的,所以相当于每个字母都算重了一次,所以要减去N。
再将序列分块,每个相同的连续的字母为一块,因为再同一块内操作效果一样,每次
答案都是N*M-N。
但是我们发现还是会有算重,再形如“ababab”两个字母交替重复出现时,例如ab,将b删除再在a前面加入b,得到ba;将a删除,b后面加入a,得到ba。这是我们没有考虑到的情况,我们发现这种情况的方案即为序列中长度大于1的序列总数,这是一个等差数列,即为len*(len-1)/2。减掉所有这样的情况即可。

 

细心读题,仔细分析。



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值