赛时安排
7:50~8:00 读题
8:10~9:00 先写了T1第一档枚举每一个线段选与不选的分数,然后接着想了想正解,想到了DP,但没想到怎么转移,然后先去做后面的题。
9:00~9:20 想了想T2的思路,想到了先求出每两个字母转化的最短距离,然后思考如何满足相同的按键连续按下至少K次这个条件,先想到贪心的思路,先找出前K个字母变成相同字母的最小代价,然后继续向后延展,然后思路卡住了,想不出来如何维护,就先放着了。
9:20~9:45 写了T3的第一档暴力分。
9:45~10:10 写了T4第一档暴力分,但是因为是
O
(
2
n
∗
m
)
O(2^{n*m})
O(2n∗m)枚举,没有用dfs,在中途不会有剪枝,所以在编译样例后返回的时间T掉了…然后这个剪枝,想了想,也没想出和这个方法配套的剪枝…
10:10~11:10 回过头看了看T3,想到了树形DP,然后开始想转移方程。既然是选点,就开一个转移数组
f
[
i
]
[
0
/
1
]
f[i][0/1]
f[i][0/1],表示枚举到i点,当前点选与不选所能选的点的最大个数,然后又开了一个数组
s
o
n
[
i
]
[
0
/
1
]
son[i][0/1]
son[i][0/1]来维护该点选与不选时子树内选择点的最小权值,然后当该点不选时,就直接将下面的最大价值传上来,当该点选时,判断能否满足条件加上下面的权值,然后向上传。
11:10~11:45 想了想T1,想到了用组合数来求,找出每一组能够合成同一组的线段,然后和其它组的线段进行组合,接着没细想先码了出来,然后发现答案挂了…接着想了想,发现内部的线段也会组合成复杂度不同的子集,然后又挂住了…
11:45~12:05 又想了想T2…然后交卷
赛后总结
这次的题都是DP…大部分都能看出来需要用DP,但是,想不出来DP的状态,以及如何转移…对于写DP的思路,还是有些问题,T3写的树形DP也出现了问题,之后仔细想想发现,每次向上传可能会导致下面的答案丢失,然后答案会出现问题。对于DP上的思想还是不够全面,想的还是不够深入。
订正
T1
这道题的思路实际上并不难,实际上按照DP的思路向下想,不难把正解的思路想出来,但当时思路还是没打开,没有想到以每条线段为基本后,加边时对前面已有边的贡献的计算方法,把思路复杂化了,然后还在每次计算另一个范围的边的时候也把问题复杂化,一直在想着如果前面那个范围加边会怎么样,然后就把思路卡住了,没有想到加这条边后再加前面的边,实际上和先加前面的边后再加后面的边一个道理…以后要想到逆向思维来思考问题…
T2
T2这道题卡在了一个性质上,就是连击,我没有想到如果 N < 2 ∗ k N<2*k N<2∗k的话,那么整个序列的字母都一定是相同的。然后先处理出来前 2 ∗ k − 1 2*k-1 2∗k−1个字母的最小代价,然后再往后转移,这样就对于连击k次的限制就不会特别大了。如果能想到这点的话,考场上应该还是可能能做出来的。
T3
题解:dsu on tree
压根就没想到这方面(刚做的专题没多久…),当时想到树形DP之后就感觉那个思路是对的…然后还有一点题目的意思是求LIS这一点没有想到,一直在思索一整棵子树中的价值,没有把树拆成链去想,如果拆成链的话,应该很快就能想到这个性质,把树拆成链来做的题还是做的少。
T4
To be continued…