Dynamic Programming21 sections · 916 units
Open in Course

SOS DP - Transition

Include or exclude bit i

To compute dp[mask][i]dp[\text{mask}][i], consider bit ii of mask:

1.1. If bit ii is 00 in mask: submasks must also have bit i=0i = 0. So dp[mask][i]=dp[mask][i1]dp[\text{mask}][i] = dp[\text{mask}][i-1]. Nothing new to add.

2.2. If bit ii is 11 in mask: submasks can have bit ii as 00 or 11. Those with bit i=1i = 1 contribute dp[mask][i1]dp[\text{mask}][i-1]. Those with bit i=0i = 0 contribute dp[mask2i][i1]dp[\text{mask} \oplus 2^i][i-1] (flip bit ii off). Combined: dp[mask][i]=dp[mask][i1]+dp[mask2i][i1]dp[\text{mask}][i] = dp[\text{mask}][i-1] + dp[\text{mask} \oplus 2^i][i-1] when bit ii is set.