From 6f12d532f0d4ab83791217cbcf1bee3622e9b41d Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Fri, 30 Oct 2026 20:18:07 +0800 Subject: [PATCH] =?UTF-8?q?Update=2060.=20n=20=E4=B8=AA=E9=AA=B0=E5=AD=90?= =?UTF-8?q?=E7=9A=84=E7=82=B9=E6=95=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补充动态规划解法的状态转移与概率计算说明;调整滚动数组小节标题、空间优化说明及相关代码注释。 --- notes/60. n 个骰子的点数.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/notes/60. n 个骰子的点数.md b/notes/60. n 个骰子的点数.md index 5e525cd3..713fbf4a 100644 --- a/notes/60. n 个骰子的点数.md +++ b/notes/60. n 个骰子的点数.md @@ -12,7 +12,7 @@ ### 动态规划 -使用一个二维数组 dp 存储点数出现的次数,其中 dp\[i]\[j] 表示前 i 个骰子产生点数 j 的次数。 +使用一个二维数组 dp 存储点数出现的次数,其中 dp\[i]\[j] 表示前 i 个骰子产生点数 j 的次数。第 i 个骰子掷出 k(1~6)时,前 i - 1 个骰子的点数和要为 j - k,因此 dp\[i]\[j] 等于 dp\[i - 1]\[j - k] 对 k = 1~6 求和,最后除以 6n 得到概率。

@@ -41,9 +41,9 @@ public double[] statisticsProbability(int num) { } ``` -### 动态规划 + 旋转数组 +### 动态规划 + 滚动数组 -空间复杂度:O(N) +第 i 行只依赖第 i - 1 行,用两行交替使用即可。空间复杂度:O(N) ```java public double[] statisticsProbability(int num) { @@ -54,10 +54,10 @@ public double[] statisticsProbability(int num) { for (int i = 1; i <= face; i++) dp[0][i] = 1; - int flag = 1; /* 旋转标记 */ + int flag = 1; /* 当前行 */ for (int i = 2; i <= num; i++, flag = 1 - flag) { for (int j = 0; j <= pointNum; j++) - dp[flag][j] = 0; /* 旋转数组清零 */ + dp[flag][j] = 0; /* 当前行清零 */ for (int j = i; j <= pointNum; j++) for (int k = 1; k <= face && k <= j; k++)