30pts + 30pts
对于 n < 20 的情况直接暴力即可, 对于 n < 2000 的情况, 考虑一维dp, 设计状态为 dp[i]
其中 i
表示在第 i
个位置能够获得的最大宝藏价值, 直接线性转移即可。时间复杂度 O(n^2)
100pts
用手模拟一组极端数据,1,1,2,4,8,16,32,64……
,对于我们的数据范围 a_i < 10^9 来说最多转移29次连续的( 2^{30} 超过了 10^9 )
对于状态设计的话,我们任然考虑一维dp :dp[i]
第一维 i
任然表示在第 i
位的时候可以取到的最大价值的宝藏, 对于 dp[i]
来说,它的最优的价值是从 dp[i - 30] , dp[i - 29] , …… , dp[i - 1]
转移过来的。时间复杂度 O(n \times 30)