Skip to content

Commit 55b325a

Browse files
authored
Create number-of-ways-of-cutting-a-pizza.py
1 parent e22fb7c commit 55b325a

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Time: O(m * n * k * (m + n))
2+
# Space: O(m * n * k)
3+
4+
class Solution(object):
5+
def ways(self, pizza, k):
6+
"""
7+
:type pizza: List[str]
8+
:type k: int
9+
:rtype: int
10+
"""
11+
MOD = 10**9+7
12+
prefix = [[0]*len(pizza[0]) for _ in xrange(len(pizza))]
13+
for j in reversed(xrange(len(pizza[0]))):
14+
accu = 0
15+
for i in reversed(xrange(len(pizza))):
16+
accu += int(pizza[i][j] == 'A')
17+
prefix[i][j] = (prefix[i][j+1] if (j+1 < len(pizza[0])) else 0) + accu
18+
dp = [[[0]*k for _ in xrange(len(pizza[0]))] for _ in xrange(len(pizza))]
19+
for i in reversed(xrange(len(pizza))):
20+
for j in reversed(xrange(len(pizza[0]))):
21+
dp[i][j][0] = 1
22+
for m in xrange(1, k):
23+
for n in xrange(i+1, len(pizza)):
24+
if prefix[i][j] == prefix[n][j]:
25+
continue
26+
if prefix[n][j] == 0:
27+
break
28+
dp[i][j][m] = (dp[i][j][m] + dp[n][j][m-1]) % MOD
29+
for n in xrange(j+1, len(pizza[0])):
30+
if prefix[i][j] == prefix[i][n]:
31+
continue
32+
if prefix[i][n] == 0:
33+
break
34+
dp[i][j][m] = (dp[i][j][m] + dp[i][n][m-1]) % MOD
35+
return dp[0][0][k-1]

0 commit comments

Comments
 (0)