File tree Expand file tree Collapse file tree 1 file changed +35
-0
lines changed Expand file tree Collapse file tree 1 file changed +35
-0
lines changed Original file line number Diff line number Diff line change
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 ]
You can’t perform that action at this time.
0 commit comments