前言
又是一套年代久远的CF,而且还是div2,说实在一点都不难。但是仍旧得不到好的成绩,可能这就是菜吧,正经的说有的地方暴力不敢想,思维很不严谨。517挑的题都挺符合我这种蒟蒻的水平的,不至于做不出来,所以这几场全都订正掉了,顺便水博客。
A
模拟,不说了。用了整整11分钟才做出此题,太菜了。
B
模拟
C
key
- DP
题意
n n n个程序猿打 m m m行代码,每个人每打一行会有 a i a_i ai个错误,求总错误不超过 b b b的分配任务方案数。
思路
最开始的思路是 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示前 i i i个人,打了前 j j j行,有 k k k个错误的方案数
f [ i ] [ j ] [ k ] = ∑ o = 0 o ≤ j & o ∗ a i ≤ k f [ i − 1 ] [ j − o ] [ k − o ∗ a i ] ( 1 ) f[i][j][k]=\sum_{o=0}^{o \leq j \& o*a_i \leq k}f[i-1][j-o][k-o*a_i] \quad (1) f[i][j][k]=o=0∑o≤j&o∗ai≤kf[i−1][j−o][k−o∗ai](1)
后来想想这不是一个无限背包吗,于是
f [ i ] [ j ] [ k ] = f [ i − 1 ] [ j ] [ k ] + f [ i ] [ j − 1 ] [ k − a i ] ( 2 ) f[i][j][k]=f[i-1][j][k]+f[i][j-1][k-a_i] \quad (2) f[i][j][k]=f[i−1][j][k]+f[i][j−1][k−ai](2)
但是从 ( 1 ) (1) (1)推到 ( 2 ) (2) (2)好像有比较科学的方式
f [ i ] [ j ] [ k ] = f [ i − 1 ] [ j ] [ k ] + ∑ o = 1 o ≤ j & o ∗ a i ≤ k f [ i − 1 ] [ j − o ] [ k − o ∗ a i ] = f [ i − 1 ] [ j ] [ k ] + f [ i ] [ j − 1 ] [ k − a i ] f[i][j][k]=f[i-1][j][k]+\sum_{o=1}^{o \leq j \& o*a_i \leq k}f[i-1][j-o][k-o*a_i] \\ =f[i-1][j][k]+f[i][j-1][k-a_i] f[i][j][k]=f[i−1][j][k]+o=1∑o≤j&o∗ai≤kf[i−1][j−o][k−o∗ai]=f[i−1][j][k]+f[i][j−1][k−ai]
看起来比较严谨,像一个前缀和优化。
D
key
- BFS
- brute force
题意
给一张联通的无向图,再给两对点 ( s 1 , t 1 ) , ( s 2 , t 2 ) (s1, t1),(s2,t2) (s1,t1),(s2,t2),要求最多能去掉多少条边,使得 d i s ( s 1 , t 1 ) ≤ l 1 , ( s 2 , t 2 ) ≤ l 2 , d i s dis(s1, t1) \le l1, (s2,t2) \le l2,dis dis(s1,t1)≤l1,(s2,t2)≤l2,dis表示最短路。
思路
暴力到难以想象。
处理出两两点之间的最短路,再枚举重合的那段路径的端点,各是 O ( n 2 ) O(n^2) O(n2)。
注意两点(其实非常容易想到):
1.这两条路可能不相交
2.点的顺序问题
第1点不注意WA4,第2点不注意WA11,没错我全都没注意。
第2点的意思是枚举端点的时候判断一下 s s s和 t t t离 i i i和 j j j的距离,取较短的那种。
E
key
- 状压DP
题意
n n n个长为 m m m的字符串,改变一个位置的字符需要 c i , j c_{i,j} ci,j的代价,求使得每个字符串都有至少一个位置满足这个位置上只有它有这个字符的最小代价(翻译的不如直接看原文)。
思路
f [ i ] f[i] f[i]表示让 i i i这个子集满足要求的最小代价,考虑转移。
不能枚举子集转移。然而子集中只有两种:一种是将各个字符串的代价相加;另一种是将在某一位置的相同字符变掉 c n t c − 1 cnt_c-1 cntc−1个,最后一个就不用变了。那么转移变成了 O ( n ) O(n) O(n),复杂度 O ( 2 n ∗ n ) O(2^n*n) O(2n∗n)就没有问题了。
注意某个字符串可以有多个位置被操作,很显然,可能我VP的时候也是这么认为的,然而我并没有这么写。无辜WA4。
后记
脑子不好使,D题暴力不会。
思路太不严谨,两题WA4调不出来。
明天比赛希望能有进步。