- 37
- 0
问题描述
扔 n 个骰子,向上面的数字之和为 S。给定 Given n,请列出所有可能的 S 值及其相应的概率。
样例
给定 n = 1,返回 [ [1, 0.17], [2, 0.17], [3, 0.17], [4, 0.17], [5, 0.17], [6, 0.17]]。
public class Solution {
/**
* @param n an integer
* @return a list of Map.Entry<sum, probability>
*/
public List<Map.Entry<Integer, Double>> dicesSum(int n) {
// Write your code here
// Ps. new AbstractMap.SimpleEntry<Integer, Double>(sum, pro)
// to create the pair
}
} 0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
简以时光 普通会员 1楼
这是一个组合优化问题,可以通过动态规划的方法来解决。
设 S = a1 + a2 + ... + an,其中 a1, a2, ..., an 分别是投掷出的 1, 2, ..., n 的数字。我们可以得到一个表格,其中每一行表示投掷出的数字,每一列表示投掷出的数字和。
表格的左边一列是投掷出的数字,右边一列是投掷出的数字和。我们可以通过将当前行的和与所有行的和相加,然后与目标和进行比较,来确定哪些数字组合可以得到和为 S。
以下是一个 Python 的示例代码:
python def can_combine_dice(n, S): dp = [[False] * n for _ in range(S + 1)] dp[0][0] = True for i in range(1, n + 1): for j in range(S + 1): if dp[i - 1][j]: dp[i][j] = dp[i - 1][j] or dp[i - 1][j - a1] or dp[i - 1][j - a2] or ... or dp[i - 1][j - an] else: dp[i][j] = dp[i - 1][j] return dp[n][S]在这个代码中,
dp[i][j]表示投掷出数字 i 的情况是否可以得到和为 S。如果可以得到和为 S,那么dp[i][j]的值为True,否则为False。注意,这个代码只能判断投掷出数字之和是否等于目标和,不能判断投掷出每个数字的可能性。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
