GDOI2.25模拟总结

做题过程

读题,第一眼感觉都不可做。于是从前往后试着做一下。
T1一开始以为黑色格子数=S很难处理,然后仔细想了一下,发现翻了x行y列之后的黑色格子数很好算,方案数也很好算。于是我打了个n^2的方法,发现过了样例,打的过程中也发现了只用枚举一个,另一个可以求出来。于是我就改成了O(n)的算法,特判一下n/2时的情况,打完、对拍。
T2前30分部分分很容易想到状压dp,同状态spfa转移,不同状态枚举边转移。后面的数据没什么想法,就先去看后面的题了。
T3完全无想法,打暴力。
T4想了一会儿,只想到n^2*m的暴力,20分都拿不了,但是又暂时想不到更优的做法,就回头看T2。
T2再看后30分部分分,它可以只通过必走边把所有点连通,有什么用呢?再看题目要求的那个东西,它是要求出一条欧拉回路(可以把一条边复制成多条),使其包含所有必走边,并且总代价最小。那么可以先把必走边提出来构个新图,然后在新图逐渐加原图中的边,使得新图能构成欧拉回路。然后我想,怎样判断一个图能够构成欧拉回路呢?每个点度数为偶数就行了,然后度数为奇数的点间两两配对连边就行了(连的边可能经过其他点,但并不影响其他点度数的奇偶性,所以可以看成给这两个点连边)。那么可以用floyd跑出两两最短路,然后状压dp求一下就行了。这个部分分保证一开始提出的必走边能让所有必达点连通,所以这种方法应该是可行的。于是我就打了,打完对拍发现没什么问题,我就开始想正解怎么做。然而,我这个做法的局限性太大了,对于多个联通块的很难合并。
最后还有40分钟,我想推下T4的n*m的算法。我单独考虑每个位置的贡献,最后推出了个式子,它看上去是n^2的,但应该能变成线性递推。可是,因为实现起来有点麻烦,我到最后都没打出来。

结果

20 + 30 + 0 + 5
T1计算方案数的式子竟然推错了,应该用挡板法计算而不是次方计算(因为有重复),而我对拍是用n^2拍的,也用到了那个错误的式子,于是我就悲剧地挂了…
T2题目第一部分的k条必走边说不包含重边,然后我惯性思维,以为后面的非必走边也是没重边的,再加上后来改程序时存边集的数组忘记扩大了,70分就变成了30分…正解是用状压dp处理连通块的情况,然后再处理欧拉回路。
T3暴力姿势不对,TLE了…
T4拿了5分,意料之内。

总结

不要太相信自己的程序,特别是推公式的题目,对拍一定要先检验公式是否正确。
不要急,一定要看清题目,修改程序时一定要注意数据范围的变化,最后交程序前一定要再检查一下。
不会做的题尽可能多拿分,掌握一些水分的技巧。

你可能感兴趣的:(GDOI2.25模拟总结)