剑指 Offer 60. n个骰子的点数

    技术2024-05-25  78

    剑指 Offer 60. n个骰子的点数

    class Solution { public: vector<double> twoSum(int n) { vector<vector<int>>dp(n+1,vector<int>(6*n+1,0)); vector<double>ans; for(int i=1;i<7;++i) dp[1][i]=1; for(int i=2;i<=n;++i) { for(int j=2;j<=6*i;++j) { for(int k=1;k<j&&k<7;++k) { dp[i][j]+=dp[i-1][j-k]; } } } int sum=0; for(auto c:dp[n]) { sum+=c; } for(auto c:dp[n]) { if(c!=0) ans.push_back(c*1.0/sum); } return ans; } };

    总结:比较典型的动态规划问题,首先确定状态,然后写出状态转移方程,最后就可以写出代码了。组合问题,优化问题,要多考虑动态规划的思想,首先由递归入手(从上到下),如何减小问题规模,或者将问题的解分为多种情况。然后反过来从下到上就是动态规划。

    Processed: 0.026, SQL: 9