Made only 2 questions, the third question did not dynamic programming ideas, vegetables dead
The third question, craps simulation
1 int dieSimulator(int n, vector<int>& rollMax) { 2 vector<vector<vector<int>>> dp(n + 1, vector<vector<int>>(6, vector<int>(16, 0))); 3 int mod = 7 + 1e9; 4 for (int i = 0; i < 6; i++) 5 dp[0][i][1] = 1; 6 for (int i = 1; i < n; i++) 7 { 8 for (int j = 0; j < 6; j++) 9 { 10 for (int k = 0; k < 6; k++) 11 { 12 if (j != k) 13 { 14 for (int l = 1; l <= rollMax[k]; l++) 15 { 16 dp[i][j][1] += dp[i - 1][k][l]; 17 dp[i][j][1] %= mod; 18 } 19 } 20 else 21 { 22 for (int l = 1; l < rollMax[k]; l++) 23 { 24 dp[i][j][l + 1] += dp[i - 1][k][l]; 25 dp[i][j][l + 1] %= mod; 26 } 27 } 28 } 29 } 30 } 31 int res = 0; 32 for (int i = 0; i < 6; i++) 33 { 34 for (int j = 1; j < rollMax[i]; j++) 35 { 36 res += dp[n - 1][i][j]; 37 res %= mod; 38 } 39 } 40 return res; 41 }