From 93c206794beafcf6c2416e59291351984982e2b9 Mon Sep 17 00:00:00 2001 From: markwang Date: Fri, 9 Aug 2024 14:22:09 +0800 Subject: [PATCH 1/2] =?UTF-8?q?01=E8=83=8C=E5=8C=85-2=E5=A2=9E=E5=8A=A0Go?= =?UTF-8?q?=E4=B8=80=E7=BB=B4=E6=95=B0=E7=BB=84,=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E7=A7=BB=E8=87=B3-1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/背包理论基础01背包-1.md | 52 +++++++++++++++++++ problems/背包理论基础01背包-2.md | 63 +++++++++++------------- 2 files changed, 81 insertions(+), 34 deletions(-) diff --git a/problems/背包理论基础01背包-1.md b/problems/背包理论基础01背包-1.md index 0c78e3f6..6b9be72d 100644 --- a/problems/背包理论基础01背包-1.md +++ b/problems/背包理论基础01背包-1.md @@ -437,6 +437,58 @@ print(dp[n - 1][bagweight]) ### Go ```go +package main + +import ( + "fmt" +) + +func main() { + var n, bagweight int // bagweight代表行李箱空间 + fmt.Scan(&n, &bagweight) + + 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) + } + + // 初始化, 因为需要用到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]) + } + } + } + + fmt.Println(dp[n-1][bagweight]) +} + +func max(x, y int) int { + if x > y { + return x + } + return y +} + ``` ### Javascript diff --git a/problems/背包理论基础01背包-2.md b/problems/背包理论基础01背包-2.md index c61a72cc..6485da1f 100644 --- a/problems/背包理论基础01背包-2.md +++ b/problems/背包理论基础01背包-2.md @@ -318,50 +318,45 @@ print(dp[n - 1][bagweight]) package main import ( - "fmt" + "fmt" ) func main() { - var n, bagweight int - fmt.Scan(&n, &bagweight) + // 读取 M 和 N + var M, N int + fmt.Scan(&M, &N) - weight := make([]int, n) - value := make([]int, n) + costs := make([]int, M) + values := make([]int, M) - for i := 0; i < n; i++ { - fmt.Scan(&weight[i]) - } - for j := 0; j < n; j++ { - fmt.Scan(&value[j]) - } + for i := 0; i < M; i++ { + fmt.Scan(&costs[i]) + } + for j := 0; j < M; j++ { + fmt.Scan(&values[j]) + } - dp := make([][]int, n) - for i := range dp { - dp[i] = make([]int, bagweight+1) - } + // 创建一个动态规划数组dp,初始值为0 + dp := make([]int, N + 1) - for j := weight[0]; j <= bagweight; j++ { - dp[0][j] = value[0] - } + // 外层循环遍历每个类型的研究材料 + 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 := 1; i < n; i++ { - for j := 0; j <= bagweight; j++ { - if j < weight[i] { - dp[i][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]) + // 输出dp[N],即在给定 N 行李空间可以携带的研究材料最大价值 + fmt.Println(dp[N]) } -func max(a, b int) int { - if a > b { - return a - } - return b +func max(x, y int) int { + if x > y { + return x + } + return y } ``` From bb2803ce967080ca6274b854458176a345b5fcee Mon Sep 17 00:00:00 2001 From: markwang Date: Fri, 9 Aug 2024 15:05:17 +0800 Subject: [PATCH 2/2] =?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 } ```