Algorithm

Find All Possible Stable Binary Arrays II

Solution
class Solution:
    def numberOfStableArrays(self, zero: int, one: int, limit: int) -> int:
        mod = 10**9 + 7
        dp = [[[0, 0] for _ in range(one + 1)] for _ in range(zero + 1)]
        for i in range(zero + 1):
            for j in range(one + 1):
                for lastBit in range(2):
                    if i == 0:
                        if lastBit == 0 or j > limit: dp[i][j][lastBit] = 0
                        else: dp[i][j][lastBit] = 1
                    elif j == 0:
                        if lastBit == 1 or i > limit: dp[i][j][lastBit] = 0
                        else: dp[i][j][lastBit] = 1
                    elif lastBit == 0:
                        dp[i][j][lastBit] = (dp[i - 1][j][0] + dp[i - 1][j][1]) % mod
                        if i > limit:
                            dp[i][j][lastBit] = (dp[i][j][lastBit] - dp[i - 1 - limit][j][1] + mod) % mod
                    else:
                        dp[i][j][lastBit] = (dp[i][j - 1][0] + dp[i][j - 1][1]) % mod
                        if j > limit:
                            dp[i][j][lastBit] = (dp[i][j][lastBit] - dp[i][j - 1 - limit][0] + mod) % mod
        return (dp[zero][one][0] + dp[zero][one][1]) % mod