2019.08.20【NOIP?提高组】模拟 A 组 总结
考场:\(85 + 0 + 35 = 120\)
T1:
赛时想到正解,但将\(LIS\)(最长上升子序列)写成了最长不下降子序列,GG(竟然还WA85)
我想的太笨,在求完\(f[]\)和\(g[]\),在用线段树维护做一遍。
\(f[i]\)指以\(i\)结尾的\(LIS\),\(g[i]\)指以\(i\)为开头的\(LIS\)
对于当前\(i\),我们将前面的\(f[j]\)都添加到\(a[i]-x\)当中,而当前的答案则为\(g[i]+tree_{max}(-maxn,a[i]-1)\)
T2:
考场想到了\(dfs\),\(DP\),折半搜索。。。
但发现时间都过不了,\(DP\)的话空间就\(MLE\),且时间也\(TLE\)。
结果没想到正解是\(DP\)。
设\(f[i][j][k]\)表示走到\((i,j)\)乘积为\(k\)的方案数。
由于时空超限,发现k有很多多余的。
所以可以设\(f[i][j][k]\)表示走到\((i,j)\)乘积为\(n/k\)的方案数。
T3:
考场先很快想到了\(O(n^2*l)\) 的解法,随后想到了\(O(n^2)\)的预处理做法,但是空超,也没时间了,就这样打完了。
原来由于询问只有\(100\)个,所以我们可以压缩空间,将\(f[i][j]\)变成与i子串为\(q[j-1]+1\) ~ \(q[j]\)相似的个数。
总结:
对于每个解法,都要尝试着去优化。
如果空间过不去的话,可以试着除去一些不必要的空间。
要先想好思路,不要打到一半后被证伪了。。。
现在:\(100 + 100 + 100 = 300\)
转载需注明出处。