Java日记2018-05-21

昨天 滑动窗口的最大值没有实现,待完成

第一题 n 个骰子的点数
动态规划的解法 使用一个二维数组 dp 存储点数出现的次数,其中 dp[i][j] 表示前 i 个骰子产生点数 j 的次数。
那么第i-1次骰子产生的点数可能是n-1,n-2,n-3,n-4,n-5,n-6,至于循环时候当然要保证j>=k,不然就出现 dp[i - 1][j - k]里面的j-k小于0,这不合适

public List<Map.Entry<Integer, Double>> dicesSum(int n) {
    final int face = 6;
    final int pointNum = face * n;
    long[][] dp = new long[n + 1][pointNum + 1];
    for (int i = 1; i <= face; i++)
        dp[1][i] = 1;

    for (int i = 2; i <= n; i++)
        for (int j = i; j <= pointNum; j++)  // 使用 i 个骰子最小点数为 i
            for (int k = 1; k <= face && k <= j; k++)
                dp[i][j] += dp[i - 1][j - k];

    final double totalNum = Math.pow(6, n);
    List<Map.Entry<Integer, Double>> ret = new ArrayList<>();
    for (int i = n; i <= pointNum; i++)
        ret.add(new AbstractMap.SimpleEntry<>(i, dp[n][i] / totalNum));
    return ret;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 8,880评论 0 18
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,358评论 0 33
  • 今晨起时,发现到处洁白,方知昨夜落雪,诗兴大作,记之。 《中华新韵》 仄起首句入韵。 一夜风声是雪鸣,繁花醒处问何...
    客串青衣阅读 2,844评论 0 4
  • 1. 如果你能活在当下这一刻,你就会活得很快乐。你就能够看清沙漠里永远有生命,天上永远有星星。 2. 而当这两个互...
    一水犹寒_阅读 3,211评论 0 0
  • 有没有这样的经历,悄悄的翻看一个人的朋友圈,从第一条到最后一条动态,从来没有过的耐心细致。 希望从那些细枝末节之中...
    赵不弃阅读 1,675评论 0 1

友情链接更多精彩内容