题目 class Solution { #define mod 1000000007 public: int dp[1005]; int numRollsToTarget(int n, int K, int target) { dp[0]=1; for(int i=1;i<=n;++i){ for(int m=target;m>=0;--m){ dp[m]=0; for(int k=1;k<=min(K,m);++k){ dp[m]+=dp[m-k],dp[m]%=mod; } } } return dp[target]; } }; class Solution { #define mod 1000000007 public: int numRollsToTarget(int d, int f, int target) { int *dp=new int[max(f,target)+1]; for(int i=0;i<=max(target,f);++i) dp[i]=0; for(int i=1;i<=f;++i) dp[i]=1;//一个骰子的时候 for(int i=2;i<=d;++i){//i个骰子 //值得注意的是:每次dp[j]一定要为0啊!而且这样 让dp[j]=0 //会有一部分没变成0 所以j-k>=i-1 这个条件必须有 for(int j=target;j>=i;--j){//i个骰子的总和 dp[j]=0; for(int k=1;k<=f&&j-k>=i-1;++k) dp[j]=(dp[j]+dp[j-k])%mod; } } return dp[target]; } };