思路
状态表示:f[i][j]表示掷i次,总和为j的方案数
状态转移:枚举最后一个骰子掷出来多少,然后加起来即可
也就是for(int k=1;k<=6;k++)ff[i][j]+=f[i-1][j-k];(稍微注意一下k+i-1<=j才有意义)
代码
class Solution {
public:
vector<int> numberOfDice(int n)
{
vector<int> ans;
int dp[n+2][7*n]={0};
for(int i=1;i<=6;i++)dp[1][i]=1;
for(int i=2;i<=n;i++)
{
for(int j=i;j<=6*i;j++)
{
for(int k=1;k<=6;k++)
{
if(k+i-1<=j)dp[i][j]+=dp[i-1][j-k];
}
}
}
for(int i=n;i<=6*n;i++)ans.push_back(dp[n][i]);
return ans;
}
};