From bb2803ce967080ca6274b854458176a345b5fcee Mon Sep 17 00:00:00 2001 From: markwang Date: Fri, 9 Aug 2024 15:05:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/背包理论基础01背包-1.md | 72 ++++++++++++------------ problems/背包理论基础01背包-2.md | 58 +++++++++---------- 2 files changed, 65 insertions(+), 65 deletions(-) diff --git a/problems/背包理论基础01背包-1.md b/problems/背包理论基础01背包-1.md index 6b9be72d..352b301a 100644 --- a/problems/背包理论基础01背包-1.md +++ b/problems/背包理论基础01背包-1.md @@ -440,53 +440,53 @@ print(dp[n - 1][bagweight]) package main import ( - "fmt" + "fmt" ) func main() { - var n, bagweight int // bagweight代表行李箱空间 - fmt.Scan(&n, &bagweight) + var n, bagweight int // bagweight代表行李箱空间 + fmt.Scan(&n, &bagweight) - weight := make([]int, n) // 存储每件物品所占空间 - value := make([]int, n) // 存储每件物品价值 + weight := make([]int, n) // 存储每件物品所占空间 + value := make([]int, n) // 存储每件物品价值 - for i := 0; i < n; i++ { - fmt.Scan(&weight[i]) - } - for j := 0; j < n; j++ { - fmt.Scan(&value[j]) - } - // dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值 - dp := make([][]int, n) - for i := range dp { - dp[i] = make([]int, bagweight+1) - } + for i := 0; i < n; i++ { + fmt.Scan(&weight[i]) + } + for j := 0; j < n; j++ { + fmt.Scan(&value[j]) + } + // dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值 + dp := make([][]int, n) + for i := range dp { + dp[i] = make([]int, bagweight + 1) + } - // 初始化, 因为需要用到dp[i - 1]的值 - // j < weight[0]已在上方被初始化为0 - // j >= weight[0]的值就初始化为value[0] - for j := weight[0]; j <= bagweight; j++ { - dp[0][j] = value[0] - } + // 初始化, 因为需要用到dp[i - 1]的值 + // j < weight[0]已在上方被初始化为0 + // j >= weight[0]的值就初始化为value[0] + for j := weight[0]; j <= bagweight; j++ { + dp[0][j] = value[0] + } - for i := 1; i < n; i++ { // 遍历科研物品 - for j := 0; j <= bagweight; j++ { // 遍历行李箱容量 - if j < weight[i] { - dp[i][j] = dp[i-1][j] // 如果装不下这个物品,那么就继承dp[i - 1][j]的值 - } else { - dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i]) - } - } - } + for i := 1; i < n; i++ { // 遍历科研物品 + for j := 0; j <= bagweight; j++ { // 遍历行李箱容量 + if j < weight[i] { + dp[i][j] = dp[i-1][j] // 如果装不下这个物品,那么就继承dp[i - 1][j]的值 + } else { + dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i]) + } + } + } - fmt.Println(dp[n-1][bagweight]) + fmt.Println(dp[n-1][bagweight]) } func max(x, y int) int { - if x > y { - return x - } - return y + if x > y { + return x + } + return y } ``` diff --git a/problems/背包理论基础01背包-2.md b/problems/背包理论基础01背包-2.md index 6485da1f..cd8f317c 100644 --- a/problems/背包理论基础01背包-2.md +++ b/problems/背包理论基础01背包-2.md @@ -313,50 +313,50 @@ for i in range(1, n): print(dp[n - 1][bagweight]) ``` -### Go +### Go ```go package main import ( - "fmt" + "fmt" ) func main() { - // 读取 M 和 N - var M, N int - fmt.Scan(&M, &N) + // 读取 M 和 N + var M, N int + fmt.Scan(&M, &N) - costs := make([]int, M) - values := make([]int, M) + costs := make([]int, M) + values := make([]int, M) - for i := 0; i < M; i++ { - fmt.Scan(&costs[i]) - } - for j := 0; j < M; j++ { - fmt.Scan(&values[j]) - } + for i := 0; i < M; i++ { + fmt.Scan(&costs[i]) + } + for j := 0; j < M; j++ { + fmt.Scan(&values[j]) + } - // 创建一个动态规划数组dp,初始值为0 - dp := make([]int, N + 1) + // 创建一个动态规划数组dp,初始值为0 + dp := make([]int, N + 1) - // 外层循环遍历每个类型的研究材料 - for i := 0; i < M; i++ { - // 内层循环从 N 空间逐渐减少到当前研究材料所占空间 - for j := N; j >= costs[i]; j-- { - // 考虑当前研究材料选择和不选择的情况,选择最大值 - dp[j] = max(dp[j], dp[j-costs[i]] + values[i]) - } - } + // 外层循环遍历每个类型的研究材料 + for i := 0; i < M; i++ { + // 内层循环从 N 空间逐渐减少到当前研究材料所占空间 + for j := N; j >= costs[i]; j-- { + // 考虑当前研究材料选择和不选择的情况,选择最大值 + dp[j] = max(dp[j], dp[j-costs[i]] + values[i]) + } + } - // 输出dp[N],即在给定 N 行李空间可以携带的研究材料最大价值 - fmt.Println(dp[N]) + // 输出dp[N],即在给定 N 行李空间可以携带的研究材料最大价值 + fmt.Println(dp[N]) } func max(x, y int) int { - if x > y { - return x - } - return y + if x > y { + return x + } + return y } ```