Advertisement
3130. Find All Possible Stable Binary Arrays II
UnknownView on LeetCode
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