Skip to content

Commit c52b49c

Browse files
authored
Create find-the-number-of-possible-ways-for-an-event.py
1 parent 97bbc49 commit c52b49c

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Time: precompute: O(max_n^2 + max_y * min(max_n, max_x))
2+
# runtime: O(min(n, x))
3+
# Space: O(max_n^2 + max_y * min(max_n, max_x))
4+
5+
MOD = 10**9+7
6+
MAX_N = MAX_X = MAX_Y = 1000
7+
R = min(MAX_N, MAX_X)
8+
NCR = [[0]*(MAX_N+1) for _ in xrange(MAX_N+1)]
9+
DP = [[0]*(MAX_N+1) for _ in xrange(MAX_N+1)]
10+
NCR[0][0] = DP[0][0] = 1
11+
for i in xrange(1, MAX_N+1):
12+
NCR[i][0] = 1
13+
for j in xrange(1, i+1):
14+
NCR[i][j] = (NCR[i-1][j]+NCR[i-1][j-1])%MOD
15+
DP[i][j] = (DP[i-1][j]*j+DP[i-1][j-1]*j)%MOD
16+
17+
POW = [[1]*(R+1) for _ in xrange(MAX_Y+1)]
18+
for i in xrange(1, MAX_Y+1):
19+
for j in xrange(1, R+1):
20+
POW[i][j] = (POW[i][j-1]*i)%MOD
21+
22+
# dp, combinatorics
23+
class Solution(object):
24+
def numberOfWays(self, n, x, y):
25+
"""
26+
:type n: int
27+
:type x: int
28+
:type y: int
29+
:rtype: int
30+
"""
31+
return reduce(lambda accu, x: (accu+x)%MOD, (NCR[x][i]*DP[n][i]*POW[y][i] for i in xrange(1, min(n, x)+1)), 0)

0 commit comments

Comments
 (0)