9.11总结

考试过程

这次考试先通读了一遍题目,感觉T1不是那么的签到,后面想了一会儿,发现可以DP,然后看了看T2,没什么太大思路,发现T3是有趣的矩阵乘法,于是就赶快开始推T3的矩阵,很快推出来了,但是一直过不了样例,然后发现自己记录的是\(f_{i-1},sum_{i-2},i^k\),三个下标完全不同,初始值赋错了,改完就AC了,然后去看T2,发现60分可以直接\(O(NS)\),5分钟就写完了,后面觉得T4的部分分可能比T2剩下40分好拿,于是就一直想T4,然后在考试结束前10分钟都不会暴力DP,最后回去看看T2,然后突然发现可以bitset优化,最后没有写完,在考试后3分钟就写完了

总结

这次考得一般,T2没有打满十分可惜,看一个题很久没有思路就可以换题,而且一个题打完暴力也不用着急去看后面的题,不然说不定就突发奇想了呢。这次考试做的好的地方在于考试里都是一遍得到了自己预期的分数,要继续保持

题解

T1:

\(dp_i\)表示前i个位置,对于每个位置,要么操作要么不操作,对于不操作显然有\(dp_i=dp_{i-1}\),如果操作的话就只需要考虑和前一个相同的数操不操作即可,于是有\(dp_i=dp_{lst_{a_i}}\),然后特判\(a_i=a_{i-1}\)的情况即可

T2:

看第二档数据,发现sum很小,于是可以想到\(O(NS)\)背包,然后发现是异或所以两个相同的数会抵消,于是对答案的贡献就只有1和0,于是用bitset优化

T3:

很明显是矩阵乘法,记录\(f_{i-1},s_{i-2},i^k\),考虑\(i^k\)如何递推,用二项式定理很好处理,但是要用到\(i^{k-1}\)等,发现k很小于是直接全部记下来就好。然后矩阵快速幂即可

T4:

因为要求差值,所以考虑先作差

先考虑只从下往上,也就是以1为根的情况,设状态为\(dp_{i,0/1}\),表示在i号点,同时轮到j号人,于是明显有dp[i][0]=min{dp[son[i]][1]}+val[i],dp[i][1]=max{dp[son[i]][0]}+val[i]

考虑如果换根怎么做,显然因为2人足够聪明,所以一定会选当时的最大值,最小值,但是如果自己就是父亲的最大/最小值的话,就只能选次小值,于是记录下父亲的次小值,在g数组内,换根的时候同时更新dp和g即可。记得特判没有次大/次小的情况

posted @ 2025-02-10 18:59  QZJ123456  阅读(21)  评论(0)    收藏  举报