Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- const int mod = 1e9 + 7;
- int dieSimulator(int n, vector<int>& rollMax) {
- int dp[5001][7][16];
- // dp[i][j][k] in ith roll in how many ways can I roll num j
- // making k consecutive numbers of j
- for (int num = 1; num <= 6; num++){
- dp[0][num][1] = 1;
- }
- for (int roll = 1; roll <= n; roll++){
- for (int num = 1; num <= 6; num++){
- int one = 0;
- for (int prev = 1; prev <= 6; prev++){
- if (prev == num) continue;
- for (int con = 1; con <= rollMax[prev - 1]; con++){
- one += dp[roll - 1][prev][con];
- one %= mod;
- }
- }
- dp[roll][num][1] = one;
- for (int con = 2; con <= rollMax[num - 1]; con++){
- dp[roll][num][con] = dp[roll - 1][num][con - 1];
- }
- }
- }
- int ans = 0;
- for (int i = 1; i <= 6; i++){
- for (int con = 1; con <= 15; con++){
- ans += dp[n][i][con];
- ans %= mod;
- }
- }
- return ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement