笔记-后续-P1270“访问”美术馆

作者发现通过一次性填充完整行dp,减少了存储需求,避免了分情况讨论和多次递归,显著减少了DFS调用次数,从而优化了动态规划解题时间。旧版本代码的问题在于逐格处理dp数组和频繁的记忆搜索。
摘要由CSDN通过智能技术生成

来了来了!AC了!

之前还没觉得自己“分离读取步骤与处理步骤”有什么问题,今天试了一下就不卡时间了!

其实本质上是由于“每当读入一次就填满一整行dp[i]”的方式,使得:
        1. 不需要存储大部分数据:穿过走廊的时间、每个dp[i][j]是否访问过、走廊之间的树形关系等等(虽然并没有卡空间);
        2. 不需要在处理数据时分情况讨论——在填入第i个走廊的一整行dp[i]时,两个子走廊dp[a]和dp[b]一定是填满的(节约时间)
        3. 不需要多次递归调用dfs函数——该函数的调用次数应当等于走廊数。我的上n版代码都在反复调用该函数,(当时间上限=6000时)dfs函数调用次数从9位数降低到6位数(虽然还是TLE)

        相比之下,我的旧版本代码最大的问题在于,每次调用dfs都单独对二维数组dp中的一格进行处理,且在后续调用时用记忆搜索的方式进行处理。记忆搜索快那么一点,但是在本题解法中还不够快(见上文原因2)

        总结:关于缩短动规时间,在dp数组里,每一次填尽可能多的信息,并且尽可能少地重复填写/调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值