You have n dice and each die has k faces
numbered from 1 to k.
Given three integers n, k, and
target, return the number of possible ways (out of
thekntotal ways)to roll the dice so
the sum of the face-up numbers equalstarget. Since
the answer may be too large, return it modulo109 + 7.
Example 1:
1 2 3 4
Input: n = 1, k = 6, target = 3 Output: 1 Explanation: You throw one die with 6 faces. There is only one way to get a sum of 3.
Example 2:
1 2 3 4
Input: n = 2, k = 6, target = 7 Output: 6 Explanation: You throw two dice, each with 6 faces. There are 6 ways to get a sum of 7: 1+6, 2+5, 3+4, 4+3, 5+2, 6+1.
Example 3:
1 2 3
Input: n = 30, k = 30, target = 500 Output: 222616187 Explanation: The answer must be returned modulo 109 + 7.
classSolution { public: intnumRollsToTarget(int n, int k, int target){ // 状态定义 // f[i][j]表示将i个筛子扔出和为j的方案数量,所以结果就是f[n][target] // max // 限制在于,每个筛子所能扔出的值范围是1-k constint mod = 1e9 + 7; int minN = min(k,target); int targetMax = n * k; vector<vector<int> > f(n+1,vector<int>(1001));