2023 百度之星决赛题解

T4 传信游戏

建反向边,从入度为 0 的结点开始搜

T5 喵喵卫士,全靠你了

考虑暴力枚举每个点的深度,发现只要知道相邻两层的深度就能用组合数算方案数,自然想到按层 DP,把上一层的点数记到状态里

赛时做法

按深度从小到大 DP 的话想要记录每个点是否被用过,以保证深度达到上界时它已经被加入,这是无法接受的

在一个前缀上可用,考虑倒序做。设 f[i,j,k] 表示构造好了深度 i 的部分,深度为 i 的有 j 个点,还剩下 k 个点可用,容易枚举当前深度的点数转移

时间复杂度 O(n4)

std

其实是可以正着做的。先将 A 排序,预处理 g[i] 表示要求深度 i 的点数

f[i,j,k] 表示构造好了深度 i 的部分,深度为 i 的有 j 个点,一共用了 k 个点。这里先令用过的点编号为 1k,之后再重新分配
枚举第 i+1 的点数 l。注意到已经有确定的 g[i] 个点深度 i,所以只能把 k+lg[i] 个编号分配到前 i 层和第 i+1

T7 这一击贯穿星辰

std

预处理 i 点体力能够达到的 A×B 的最大值 f[i]100+C 的最大值 g[i]
可以证明 D 增大时分配给 100+C 的体力值是单增。决策单调性

凸包

分配 i 点体力给 A×B 的答案为 f[i](g[mi]D)=Df[i]+f[i]g[mi]。凸包

T8 小度的双色球

从颜色和盒子两个角度考虑。精细实现可以做到时间 O(nn),空间 O(n),并避免使用哈希表

T9 寻宝

二分答案。考虑计算被偷走的价值 mid 最少需要多少名警员

如果 c[i]+d[i]>mid,那么先放 a[i] 个,这样只能偷钻石。考虑最小割,用 ST 的路径代表小偷可能的移动路径

  • 如果 d[i]>mid(S,i,b[i]a[i])
  • 如果原图中 i,j 相邻:(i,j,+)
  • 如果 c[i]+d[i]mid(i,T,a[i])

std 的想法是每个点只有 不放 或 放 a[i] or b[i] 个,用割与 ST 的连边代表放或不放两种情况

posted @   ft61  阅读(363)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示