Skip to content
This repository was archived by the owner on Sep 20, 2023. It is now read-only.

Commit 0041ac2

Browse files
aQuaaQua
authored andcommitted
375 finish
1 parent 9691275 commit 0041ac2

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

Algorithms/0375.guess-number-higher-or-lower-ii/guess-number-higher-or-lower-ii.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
11
package Problem0375
22

33
func getMoneyAmount(n int) int {
4-
54
// dp[i][j] 保证能猜出 i<=x<=j 中 x 的具体值的最小金额
65
// dp[1][n] 是答案
7-
dp := make([]int, n+1)
8-
9-
MIN := 1<<63 - 1
6+
dp := make([][]int, n+1)
7+
for i := range dp {
8+
dp[i] = make([]int, n+1)
9+
}
1010

1111
var i, j, k int
1212
for j = 2; j <= n; j++ {
13-
for i = 1; i < j; i++ {
14-
dp[j] = MIN
15-
for k = 1; k < i; k++ {
16-
dp[j] = min(dp[j], k+max(dp[k-1], k+dp[i-k]))
13+
for i = j - 1; 0 < i; i-- {
14+
// 为了确保可以猜出 i<=x<=j 中的 x
15+
// 第一次,我们可以猜 x 为,i,i+1,...,j-1
16+
// 所有这些可能性中的最小值就是 dp[i][j] 的值
17+
dp[i][j] = i + dp[i+1][j]
18+
for k = i + 1; k < j; k++ {
19+
// k+max(dp[i][k-1], dp[k+1][j])) 猜 x 为 k 所花费的最小费用
20+
dp[i][j] = min(dp[i][j], k+max(dp[i][k-1], dp[k+1][j]))
1721
}
1822
}
1923
}
2024

21-
return dp[n]
25+
return dp[1][n]
2226
}
2327

2428
func max(a, b int) int {

Algorithms/0375.guess-number-higher-or-lower-ii/guess-number-higher-or-lower-ii_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ var tcs = []struct {
1313
ans int
1414
}{
1515

16-
{20, 49},
16+
{12, 21},
17+
{5, 6},
1718
{1, 0},
1819
{2, 1},
1920
{3, 2},
@@ -24,6 +25,7 @@ var tcs = []struct {
2425
{9, 14},
2526
{10, 16},
2627
{12, 21},
28+
{20, 49},
2729
{100, 400},
2830
{300, 1640},
2931

0 commit comments

Comments
 (0)