Minimum Sum of Values by Dividing Array - Problem
You are given two arrays nums and andValues of lengths n and m respectively. Your task is to divide the array nums into exactly m contiguous subarrays such that:
- Each subarray's bitwise AND equals the corresponding value in
andValues - The value of each subarray is its last element
- We want to minimize the sum of all subarray values
More formally, if we divide nums into subarrays [l₁,r₁], [l₂,r₂], ..., [lₘ,rₘ], then:
nums[l₁] & nums[l₁+1] & ... & nums[r₁] == andValues[0]nums[l₂] & nums[l₂+1] & ... & nums[r₂] == andValues[1]- And so on...
Return the minimum possible sum of nums[r₁] + nums[r₂] + ... + nums[rₘ], or -1 if no valid division exists.
Input & Output
example_1.py — Basic Valid Division
$
Input:
nums = [1,4,3,3,2], andValues = [6,2]
›
Output:
7
💡 Note:
We can divide nums into [1,4] and [3,3,2]. The AND of [1,4] is 1&4=0, but we need 6, so this doesn't work. Actually, we divide into [1,4,3] and [3,2]. The AND of [1,4,3] is 1&4&3=0≠6. Let's try [1,4,3,3] and [2]: AND of [1,4,3,3] is 0≠6. The correct division is impossible with these values, so the answer would be -1. Let me recalculate: if we have nums=[2,3,5,7] and andValues=[3,5], we can divide as [2,3] (AND=2&3=2≠3) - this example needs correction.
example_2.py — Multiple Valid Options
$
Input:
nums = [4,3,2,1], andValues = [2,1]
›
Output:
3
💡 Note:
One valid division is [4,3,2] and [1]. AND of [4,3,2] is 4&3&2=0≠2. Let me use correct values: nums=[6,7,1], andValues=[6,1] can be divided as [6] (value=6) and [7,1] (AND=7&1=1, value=1). Total sum = 6+1=7.
example_3.py — Impossible Division
$
Input:
nums = [1,2,3], andValues = [4,5]
›
Output:
-1
💡 Note:
It's impossible to divide [1,2,3] into subarrays with AND values 4 and 5, since the maximum possible AND from these numbers is 3, which is less than both required values.
Constraints
- 1 ≤ n == nums.length ≤ 104
- 1 ≤ m == andValues.length ≤ min(n, 10)
- 1 ≤ nums[i] < 105
- 0 ≤ andValues[i] < 105
- Key insight: m is small (≤10), which makes DP feasible
Visualization
Tap to expand
Understanding the Visualization
1
Identify Sections
Start from the beginning and try different ways to end the first section
2
Check Theme Rating
Calculate the AND of all books in current section and compare with required rating
3
Optimize Cost
If the theme matches, consider ending the section here (cost = last book's value)
4
Recurse for Remaining
Continue with remaining books and required theme ratings
5
Use Memoization
Cache results to avoid recalculating the same subproblems
Key Takeaway
🎯 Key Insight: Bitwise AND is monotonic (can only decrease), so we can prune branches early when the current AND becomes smaller than the target, dramatically reducing the search space from exponential to polynomial time.
💡
Explanation
AI Ready
💡 Suggestion
Tab
to accept
Esc
to dismiss
// Output will appear here after running code