DDSA
Advertisement

3130. Find All Possible Stable Binary Arrays II

3130.cs
C#
public class Solution
{
    public int NumberOfStableArrays(int zero, int one, int limit)
    {
        const int MOD = 1_000_000_007;
        // dp[i,j,k] := the number of stable arrays, where the number of
        // occurrences of 0 is i and the number of occurrences of 1 is j and the last
        // number is k (0/1)
        long[,,] dp = new long[zero + 1, one + 1, 2];

        for (int i = 0; i <= Math.Min(zero, limit); ++i)
            dp[i, 0, 0] = 1;

        for (int j = 0; j <= Math.Min(one, limit); ++j)
            dp[0, j, 1] = 1;

        for (int i = 1; i <= zero; ++i)
        {
            for (int j = 1; j <= one; ++j)
            {
                dp[i, j, 0] = (dp[i - 1, j, 0] + dp[i - 1, j, 1] -
                               (i - limit < 1 ? 0 : dp[i - limit - 1, j, 1]) + MOD) % MOD;
                dp[i, j, 1] = (dp[i, j - 1, 0] + dp[i, j - 1, 1] -
                               (j - limit < 1 ? 0 : dp[i, j - limit - 1, 0]) + MOD) % MOD;
            }
        }

        return (int)((dp[zero, one, 0] + dp[zero, one, 1]) % MOD);
    }
}
Advertisement