This commit is contained in:
krahets
2024-04-13 21:17:44 +08:00
parent 9332a91e26
commit 6afa70e7bc
55 changed files with 334 additions and 182 deletions

View File

@ -184,7 +184,9 @@ comments: true
if state + choice > n {
continue
}
// 嘗試:做出選擇,更新狀態
backtrack(choices: choices, state: state + choice, n: n, res: &res)
// 回退
}
}
@ -1597,7 +1599,9 @@ $$
var a = 1
var b = 2
for (i in 3..n) {
b += a.also { a = b }
val temp = b
b += a
a = temp
}
return b
}

View File

@ -1036,11 +1036,7 @@ $$
```kotlin title="knapsack.kt"
/* 0-1 背包:動態規劃 */
fun knapsackDP(
wgt: IntArray,
_val: IntArray,
cap: Int
): Int {
fun knapsackDP(wgt: IntArray, _val: IntArray, cap: Int): Int {
val n = wgt.size
// 初始化 dp 表
val dp = Array(n + 1) { IntArray(cap + 1) }
@ -1429,11 +1425,7 @@ $$
```kotlin title="knapsack.kt"
/* 0-1 背包:空間最佳化後的動態規劃 */
fun knapsackDPComp(
wgt: IntArray,
_val: IntArray,
cap: Int
): Int {
fun knapsackDPComp(wgt: IntArray, _val: IntArray, cap: Int): Int {
val n = wgt.size
// 初始化 dp 表
val dp = IntArray(cap + 1)
@ -1443,8 +1435,7 @@ $$
for (c in cap downTo 1) {
if (wgt[i - 1] <= c) {
// 不選和選物品 i 這兩種方案的較大值
dp[c] =
max(dp[c], dp[c - wgt[i - 1]] + _val[i - 1])
dp[c] = max(dp[c], dp[c - wgt[i - 1]] + _val[i - 1])
}
}
}