其实没必要去求什么最大最小值,我们只关心能不能刚好凑够j, 所以初始化dp = [False] * (N+1) 状态转移时直接 dp[j] = dp[j] | dp[j-nums[i]] 即可。到这里优化不太大。 观察我们的 dp[j] = dp[j] | dp[j-nums[i]],其实我们只关心 dp中为False的数据就可以了,不必枚举每个j。 所以可以用 dict记录 为False的j,若dp[j-nums[i]]为true,pop出字典就行了。
1

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务