CSP-D5 赛后总结

本文作者分享了参加算法竞赛的经历,重点讨论了D5A、D5B、D5C和D5D四道题目。在D5B题目中,由于忘记使用记忆化搜索导致分数降低。D5D题目中,通过优化从O(n^2)到O(n)的时间复杂度寻求高分。作者反思了比赛策略,建议在临近结束时检查代码并避免仓促作答。
摘要由CSDN通过智能技术生成

表现还是不错的。

D5A pilgrimage

最开始想用邻接矩阵乘法,后面发现不用。直接 dfs
就行了。

D5B history

一眼就看出是区间 dp。这次可以按套路来了:设 f [ l ] [ r ] f[l][r] f[l][r] [ l , r ] [l,r] [l,r] 的答案,如果 s t r l = s t r r str_l=str_r strl=strr 那就是 f [ l + 1 ] [ r − 1 ] + 2 f[l+1][r-1]+2 f[l+1][r1]+2,否则是 f [ l + 1 ] [ r ] f[l+1][r] f[l+1][r] f [ l ] [ r − 1 ] f[l][r-1] f[l][r1] 中取 min。

忘了加记忆化,变为和暴力同分。100 -> 20。

D5C destiny

挺有意思的一道题。

首先如果没有两个相同数字相邻,那就很好做。显然,可以把整个序列分成若干个单峰段。每次询问如果跨区间那就是 no,否则就是 yes。

但是可能会出现两个相同数字相邻。想了一会,发现可以把相同的数字段合并成一个数字,即缩段。然后开一个数组 at[i] 表示坐标点 i 在被缩段之后的下标。

一些简单的细节就不说了。

D5D freedom

写这道题时还剩 1h,打算打个 30 分做法的,结果居然没调出来。

f [ i ] [ j ] f[i][j] f[i][j] 表示前 i i i 位,最后一个数是 j j j 的方案数。直接转移是 O ( n 2 V ) O(n^2V) O(n2V) 的。

然后其实会发现那一维 j j j 可以省掉。因为哪种颜色都没有关系,只要不重复。推了下式子:有 k k k 个数让你填到 n n n 位里去(可重复),相邻两位数字不同,则方案数为 k × ( k − 1 ) n − 1 k \times (k-1)^{n-1} k×(k1)n1

所以 dp 的时候就直接搞搞就好了。 O ( n 2 ) O(n^2) O(n2)

看样子是有 O ( n ) O(n) O(n) 的做法拿 60 分?这个想不到。

如果把这些式子拆开继续推的话应该能推出一个类似于二项式的东西,然后就能 O ( log ⁡ n ) O(\log n) O(logn) 了。只是数学水平堪忧,推不出来。

Conclusion

预估分 330,实际得分 220。主要问题在 B 题忘了记忆化。

事实上今天早上还打了 MarsOJ 的模拟赛。文件输入输出错了,丢了 90 分。

感觉在赛末 10 分钟就别写了(除非真的能写出来),返回去检查一下代码吧,多跑跑大样例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值