LC 100241. 求出所有子序列的能量和未命名
https://leetcode.cn/problems/find-the-sum-of-the-power-of-all-subsequences/description/
这题解法在应对每个下标时候如何更新状态,假设处理到了 `nums[i]`, 并且之前的状态是 `st[x] = c` (里面表示子序列和为x的次数出现c次),完了之后就是我们怎么更新状态。
- 首先x状态数量需要变成 \(2*c\) , 这是因为选择或者是不选择 `nums[i]`, 我们都可以得到x状态。
- 然后需要累加上 `st[x + nums[i]] += c`. 这种情况下面是必须选择 `nums[i]`.
- 最后就是 `st[nums[i]] += (1 << i)`. 这个是因为出现 `nums[i]` 可以根据前面子序列数量而定。
这几种情况是不相交的,所以不会出现重复计算的情况,初始化状态是空。
class Solution: def sumOfPower(self, nums: List[int], k: int) -> int: from collections import Counter now = Counter() MOD = 10 ** 9 + 7 for i in range(len(nums)): z = nums[i] tmp = Counter() for x, c in now.items(): tmp[x] = (2 * c) % MOD for x, c in now.items(): value = x + z if value > k: continue tmp[value] += c tmp[z] += (2 ** i) % MOD now = tmp return now[k] % MOD