1 typedef pair<int,int> P;
2 typedef long long ll;
3 #define _for(i,a,b) for(register int i = (a);i < b;i ++)
4 #define _rep(i,a,b) for(register int i = (a);i > b;i --)
5 #define INF 0x3f3f3f3f
6 #define MOD 1000000007
7 #define maxn 10003
8 #define pb push_back
9 #define debug() printf("Miku Check OK!\n")
10
11
12 class Solution
13 {
14 public:
15 ll dp[7][16][5005];
16 int dieSimulator(int n, vector<int>& rollMax)
17 {
18 _for(i,1,7)
19 dp[i][1][1] = 1;
20
21 _for(i,2,n+1)
22 _for(j,1,7)
23 {
24 _for(k,1,rollMax[j-1]+1)
25 dp[j][k][i] += dp[j][k-1][i-1],
26 dp[j][k][i] %= MOD;
27 _for(k,1,7)
28 {
29 if(k==j)
30 continue;
31 _for(m,1,rollMax[k-1]+1)
32 dp[j][1][i] += dp[k][m][i-1];
33 dp[j][1][i] %= MOD;
34 }
35 }
36 ll ans = 0;
37 _for(i,1,7)
38 _for(j,1,rollMax[i-1]+1)
39 ans += dp[i][j][n],ans %= MOD;
40 return ans;
41 }
42 };