Skip to content

Commit 9a93312

Browse files
committed
Time: 4 ms (100.00%), Space: 6.9 MB (97.00%) - LeetHub
1 parent 05288f6 commit 9a93312

File tree

1 file changed

+37
-34
lines changed

1 file changed

+37
-34
lines changed
+37-34
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,45 @@
11
class Solution {
22
public:
3-
#define inf 1000000007
43
int dieSimulator(int n, vector<int>& rollMax) {
5-
// int dp[rolls][no][cnt]
6-
vector<vector<vector<int>>> dp(n, vector<vector<int>>(6, vector<int>(16, 0)));
7-
8-
// dp[r = 1][n][c]
9-
for(int j = 0; j < 6; j++){
10-
dp[0][j][1] = 1;
4+
return getWays(n, rollMax);
5+
}
6+
7+
int getWays(int n, vector<int> maxRolls) {
8+
// Code here
9+
// dp[i][j] = no of seq till i throws and ending in j
10+
const int mod = 1e9 + 7;
11+
int dp[n + 1][8];
12+
13+
for (int i = 0; i < 6; i++) {
14+
dp[1][i] = 1;
1115
}
12-
13-
for(int i = 1; i < n; i++){
14-
for(int j = 0; j < 6; j++){
16+
dp[1][6] = 6;
17+
18+
for (int i = 2; i <= n; i++) {
19+
int sum = dp[i - 1][6];// prev all sum
20+
int tot = 0;
21+
22+
for (int j = 0; j < 6; j++) {
23+
int val = 0;
24+
int prev_pos_till = i - maxRolls[j] - 1;
1525

16-
// case 1 : dp[r][n][1]
17-
for(int k = 0; k < 6; k++){
18-
if(k == j) continue;
19-
for(int m = 1; m <= rollMax[k]; m++){
20-
dp[i][j][1] = (dp[i][j][1] + dp[i - 1][k][m]) % inf;
21-
}
26+
if (prev_pos_till < 0)
27+
val = val + 0;
28+
else if (prev_pos_till == 0) {
29+
val = val + 1;
30+
} else {
31+
val = val + (dp[prev_pos_till][6] - dp[prev_pos_till][j]) % mod;
2232
}
23-
24-
// case 2: dp[r][n][>=2]
25-
for(int m = 2; m <= rollMax[j]; m++){
26-
dp[i][j][m] = dp[i - 1][j][m - 1];
27-
}
28-
}
29-
}
30-
31-
int cnt = 0;
32-
for(int j = 0; j < 6; j++){
33-
for(int k = 1; k <= rollMax[j]; k++){
34-
cnt = (cnt + dp[n - 1][j][k]) % inf;
33+
34+
int v = (sum - val) % mod;
35+
v = (v + mod) % mod;
36+
dp[i][j] = v;
37+
tot = (tot + v) % mod;
3538
}
39+
40+
dp[i][6] = tot;
3641
}
37-
38-
return cnt;
39-
}
40-
};
41-
// general house paint, no consecutive houses same color
42-
// dp[h][c] = sum(dp[h - 1][cc]) cc != c
42+
43+
return dp[n][6];
44+
}
45+
};

0 commit comments

Comments
 (0)