Skip to content

Commit 4beceed

Browse files
authored
Create find-all-possible-stable-binary-arrays-i.py
1 parent 1e62368 commit 4beceed

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Time: O(n * m)
2+
# Space: O(n * m)
3+
4+
# dp
5+
class Solution(object):
6+
def numberOfStableArrays(self, zero, one, limit):
7+
"""
8+
:type zero: int
9+
:type one: int
10+
:type limit: int
11+
:rtype: int
12+
"""
13+
MOD = 10**9+7
14+
dp = [[[0]*2 for _ in xrange(one+1)] for _ in xrange(zero+1)]
15+
for i in xrange(zero+1):
16+
dp[i][0][0] = 1 if i <= limit else 0
17+
for j in xrange(one+1):
18+
dp[0][j][1] = 1 if j <= limit else 0
19+
for i in xrange(1, zero+1):
20+
for j in xrange(1, one+1):
21+
dp[i][j][0] = (dp[i-1][j][0]+dp[i-1][j][1])%MOD
22+
dp[i][j][1] = (dp[i][j-1][0]+dp[i][j-1][1])%MOD
23+
if i-limit-1 >= 0:
24+
dp[i][j][0] = (dp[i][j][0]-dp[i-limit-1][j][1])%MOD
25+
if j-limit-1 >= 0:
26+
dp[i][j][1] = (dp[i][j][1]-dp[i][j-limit-1][0])%MOD
27+
return (dp[-1][-1][0]+dp[-1][-1][1])%MOD
28+
29+
30+
# Time: O(n * m * l)
31+
# Space: O(n * m)
32+
# dp
33+
class Solution2(object):
34+
def numberOfStableArrays(self, zero, one, limit):
35+
"""
36+
:type zero: int
37+
:type one: int
38+
:type limit: int
39+
:rtype: int
40+
"""
41+
MOD = 10**9+7
42+
dp = [[[0]*2 for _ in xrange(one+1)] for _ in xrange(zero+1)]
43+
dp[0][0][0] = dp[0][0][1] = 1
44+
for i in xrange(zero+1):
45+
for j in xrange(one+1):
46+
for k in xrange(1, limit+1):
47+
if i-k >= 0:
48+
dp[i][j][0] = (dp[i][j][0]+dp[i-k][j][1])%MOD
49+
if j-k >= 0:
50+
dp[i][j][1] = (dp[i][j][1]+dp[i][j-k][0])%MOD
51+
return (dp[-1][-1][0]+dp[-1][-1][1])%MOD

0 commit comments

Comments
 (0)