900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > (C++)剑指offer-拓展:骰子的点数(动态规划)

(C++)剑指offer-拓展:骰子的点数(动态规划)

时间:2021-04-27 13:14:07

相关推荐

(C++)剑指offer-拓展:骰子的点数(动态规划)

(C++)剑指offer-拓展:骰子的点数

考虑用动归,数组dp[i][j]表示用i个骰子扔出和为j的可能数,因为第i个骰子可能扔出1-6的点数,则dp[i][j]=dp[i-1][j-1]+dp[i-1][j-2]+dp[i-1][j-3]+dp[i-1][j-4]+dp[i-1][j-5]+dp[i-1][j-6];状态表示f[i][j]:表示前i次总和是j的方案数;状态转化:f[i][j] += f[i-1][i - k];时间复杂度为O(n2),具体代码如下:

class Solution {public:vector<int> numberOfDice(int n) {vector<vector<int>> f(n + 1, vector<int>(6 * n + 1));vector<int> res;f[0][0] = 1;for(int i = 1; i <= n; i++){for(int j = 1; j <= i * 6; j++){for(int k = 1; k <= min(j, 6); k++)f[i][j] += f[i - 1][j - k];}}for(int i = n; i <= n*6; i++) res.push_back(f[n][i]);return res;}};

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。