3
int mod = 1_000_000_007;5
public int dieSimulator(int n, int[] rollMax) {6
dp = new long[n + 1][7][16];7
for (long[][] row : dp) for (long[] col : row) Arrays.fill(col, -1);9
return (int) helper(n, 0, 0, rollMax, 0);12
private long helper(int n, int dice, int prev, int[] rollMax, int runs) {13
if (n == dice) return 1;15
if (dp[dice][prev][runs] != -1) return dp[dice][prev][runs];19
for (int i = 1; i <= 6; i++) {20
if (prev != 0 && i == prev && rollMax[i - 1] <= runs) continue;21
if (i == prev) ans = (ans + helper(n, dice + 1, i, rollMax, runs + 1)) % mod;22
else ans = (ans + helper(n, dice + 1, i, rollMax, 1)) % mod;25
dp[dice][prev][runs] = ans;