Luogu 4438 [HNOI/AHOI2018]道路

博客介绍了Luogu 4438题目的解决方案,关键在于使用动态规划设立状态$f_{x, i, j}$表示从节点$x$到根节点经过$i$条公路和$j$条铁路的代价。对于叶子节点,状态可以直接计算;对于内部节点,通过转移公式进行更新。由于空间限制,采用了记忆化搜索减少一半的$f$数组空间,时间复杂度为$O(n * 40 * 40)$。完整代码来源于https://www.cnblogs.com/CzxingcHen/p/9908060.html。" 108823837,4892139,OkHttp3授权异常处理:Unexpected char 0x0a,"['Java', '网络请求', '异常调试']
摘要由CSDN通过智能技术生成

$dp$。

这道题最关键的是这句话:

跳出思维局限大胆设状态,设$f_{x, i, j}$表示从$x$到根要经过$i$条公路,$j$条铁路的代价,那么对于一个叶子结点,有$f_{x, i, j} = c_x * (a_x + i) * (b_x + j)$,对于内部结点,有转移:

  $f_{x, i, j} = min(f_{lson(x), i + 1, j} + f_{rson(x), i, j}, f_{lson(x), i, j}) + f_{rson(x), i, j + 1}$。

然后$40000 * 40 * 40$就快$512MB$了,然后最后一个点就光荣$MLE$了。

所以要写成记搜的,就可以省掉一半$f$数组的空间。

时间复杂度上界是$O(n * 40 * 40)$。

Code:

#include <cstdio>
#include <cstring>
using namespace std;
typedef lo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值