来个力扣每日一题吧~~~
是之前正常骰子(六个面)的变形,其实思路差不多,都DP:
```java
class Solution {
public int numRollsToTarget(int n, int k, int target) {
//dp[i][j]的含义:有 i + 1 个骰子(编号从0开始),和等于 j 值的总数目。
int[][] dp = new int[n][target + 1];
int MOD = 1_000_000_000 + 7;
//初始化:第一个骰子
for (int i = 1; i <= k && i <= target; i++) {
dp[0][i] = 1;
}
//遍历每一个骰子
for (int i = 1; i < n; i++) {
//上几个骰子的值遍历
for (int j = i; j <= target - 1; j++) {
//在上几个骰子的值的基础上,投k个数
for (int m = 1; m <= k; m++) {
if (j + m > target) {
continue;
}
dp[i][j + m] += dp[i - 1][j];
dp[i][j + m] %= MOD;
}
}
}
return dp[n - 1][target];
}
}