Welcome to Subscribe On Youtube

3082. Find the Sum of the Power of All Subsequences

Description

You are given an integer array nums of length n and a positive integer k.

The power of an array of integers is defined as the number of subsequences with their sum equal to k.

Return the sum of power of all subsequences of nums.

Since the answer may be very large, return it modulo 109 + 7.

 

Example 1:

Input: nums = [1,2,3], k = 3

Output: 6

Explanation:

There are 5 subsequences of nums with non-zero power:

  • The subsequence [1,2,3] has 2 subsequences with sum == 3: [1,2,3] and [1,2,3].
  • The subsequence [1,2,3] has 1 subsequence with sum == 3: [1,2,3].
  • The subsequence [1,2,3] has 1 subsequence with sum == 3: [1,2,3].
  • The subsequence [1,2,3] has 1 subsequence with sum == 3: [1,2,3].
  • The subsequence [1,2,3] has 1 subsequence with sum == 3: [1,2,3].

Hence the answer is 2 + 1 + 1 + 1 + 1 = 6.

Example 2:

Input: nums = [2,3,3], k = 5

Output: 4

Explanation:

There are 3 subsequences of nums with non-zero power:

  • The subsequence [2,3,3] has 2 subsequences with sum == 5: [2,3,3] and [2,3,3].
  • The subsequence [2,3,3] has 1 subsequence with sum == 5: [2,3,3].
  • The subsequence [2,3,3] has 1 subsequence with sum == 5: [2,3,3].

Hence the answer is 2 + 1 + 1 = 4.

Example 3:

Input: nums = [1,2,3], k = 7

Output: 0

Explanation: There exists no subsequence with sum 7. Hence all subsequences of nums have power = 0.

 

Constraints:

  • 1 <= n <= 100
  • 1 <= nums[i] <= 104
  • 1 <= k <= 100

Solutions

Solution 1

  • class Solution {
        public int sumOfPower(int[] nums, int k) {
            final int mod = (int) 1e9 + 7;
            int n = nums.length;
            int[][] f = new int[n + 1][k + 1];
            f[0][0] = 1;
            for (int i = 1; i <= n; ++i) {
                for (int j = 0; j <= k; ++j) {
                    f[i][j] = (f[i - 1][j] * 2) % mod;
                    if (j >= nums[i - 1]) {
                        f[i][j] = (f[i][j] + f[i - 1][j - nums[i - 1]]) % mod;
                    }
                }
            }
            return f[n][k];
        }
    }
    
    
  • class Solution {
    public:
        int sumOfPower(vector<int>& nums, int k) {
            const int mod = 1e9 + 7;
            int n = nums.size();
            int f[n + 1][k + 1];
            memset(f, 0, sizeof(f));
            f[0][0] = 1;
            for (int i = 1; i <= n; ++i) {
                for (int j = 0; j <= k; ++j) {
                    f[i][j] = (f[i - 1][j] * 2) % mod;
                    if (j >= nums[i - 1]) {
                        f[i][j] = (f[i][j] + f[i - 1][j - nums[i - 1]]) % mod;
                    }
                }
            }
            return f[n][k];
        }
    };
    
    
  • class Solution:
        def sumOfPower(self, nums: List[int], k: int) -> int:
            mod = 10**9 + 7
            n = len(nums)
            f = [[0] * (k + 1) for _ in range(n + 1)]
            f[0][0] = 1
            for i, x in enumerate(nums, 1):
                for j in range(k + 1):
                    f[i][j] = f[i - 1][j] * 2 % mod
                    if j >= x:
                        f[i][j] = (f[i][j] + f[i - 1][j - x]) % mod
            return f[n][k]
    
    
  • func sumOfPower(nums []int, k int) int {
    	const mod int = 1e9 + 7
    	n := len(nums)
    	f := make([][]int, n+1)
    	for i := range f {
    		f[i] = make([]int, k+1)
    	}
    	f[0][0] = 1
    	for i := 1; i <= n; i++ {
    		for j := 0; j <= k; j++ {
    			f[i][j] = (f[i-1][j] * 2) % mod
    			if j >= nums[i-1] {
    				f[i][j] = (f[i][j] + f[i-1][j-nums[i-1]]) % mod
    			}
    		}
    	}
    	return f[n][k]
    }
    
    
  • function sumOfPower(nums: number[], k: number): number {
        const mod = 10 ** 9 + 7;
        const n = nums.length;
        const f: number[][] = Array.from({ length: n + 1 }, () => Array(k + 1).fill(0));
        f[0][0] = 1;
        for (let i = 1; i <= n; ++i) {
            for (let j = 0; j <= k; ++j) {
                f[i][j] = (f[i - 1][j] * 2) % mod;
                if (j >= nums[i - 1]) {
                    f[i][j] = (f[i][j] + f[i - 1][j - nums[i - 1]]) % mod;
                }
            }
        }
        return f[n][k];
    }
    
    

All Problems

All Solutions