Leetcode LCP 53. 守护太空城 DP 二进制状态压缩
首先1 <= time[i] <= 5非常的小,我们把时间这个维度可以压缩成5个二进制位,对应位为1表示需要屏障保护,0表示不需要屏障保护
所以定义f[i][j]为在第i个位置屏障状态为j需要的最少能量,其中0<=j<32,正好是5个二进制位,每个位1或0分别对应相应的时间是否有屏障保护
转移:
1.自身开屏障,对应5个二进制位中变成一些单独的1或者连续的1
2.将自身和右边相邻的一起开屏障
不需要再枚举左边开了,因为右边开包括了左边开的情况
具体的细节代码中有注释
class
原创
2022-04-16 20:52:12 ·
533 阅读 ·
0 评论