mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 07:35:35 +08:00
格式
This commit is contained in:
@ -440,53 +440,53 @@ print(dp[n - 1][bagweight])
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var n, bagweight int // bagweight代表行李箱空间
|
var n, bagweight int // bagweight代表行李箱空间
|
||||||
fmt.Scan(&n, &bagweight)
|
fmt.Scan(&n, &bagweight)
|
||||||
|
|
||||||
weight := make([]int, n) // 存储每件物品所占空间
|
weight := make([]int, n) // 存储每件物品所占空间
|
||||||
value := make([]int, n) // 存储每件物品价值
|
value := make([]int, n) // 存储每件物品价值
|
||||||
|
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
fmt.Scan(&weight[i])
|
fmt.Scan(&weight[i])
|
||||||
}
|
}
|
||||||
for j := 0; j < n; j++ {
|
for j := 0; j < n; j++ {
|
||||||
fmt.Scan(&value[j])
|
fmt.Scan(&value[j])
|
||||||
}
|
}
|
||||||
// dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值
|
// dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值
|
||||||
dp := make([][]int, n)
|
dp := make([][]int, n)
|
||||||
for i := range dp {
|
for i := range dp {
|
||||||
dp[i] = make([]int, bagweight+1)
|
dp[i] = make([]int, bagweight + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化, 因为需要用到dp[i - 1]的值
|
// 初始化, 因为需要用到dp[i - 1]的值
|
||||||
// j < weight[0]已在上方被初始化为0
|
// j < weight[0]已在上方被初始化为0
|
||||||
// j >= weight[0]的值就初始化为value[0]
|
// j >= weight[0]的值就初始化为value[0]
|
||||||
for j := weight[0]; j <= bagweight; j++ {
|
for j := weight[0]; j <= bagweight; j++ {
|
||||||
dp[0][j] = value[0]
|
dp[0][j] = value[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 1; i < n; i++ { // 遍历科研物品
|
for i := 1; i < n; i++ { // 遍历科研物品
|
||||||
for j := 0; j <= bagweight; j++ { // 遍历行李箱容量
|
for j := 0; j <= bagweight; j++ { // 遍历行李箱容量
|
||||||
if j < weight[i] {
|
if j < weight[i] {
|
||||||
dp[i][j] = dp[i-1][j] // 如果装不下这个物品,那么就继承dp[i - 1][j]的值
|
dp[i][j] = dp[i-1][j] // 如果装不下这个物品,那么就继承dp[i - 1][j]的值
|
||||||
} else {
|
} else {
|
||||||
dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i])
|
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 {
|
func max(x, y int) int {
|
||||||
if x > y {
|
if x > y {
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
return y
|
return y
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -313,50 +313,50 @@ for i in range(1, n):
|
|||||||
print(dp[n - 1][bagweight])
|
print(dp[n - 1][bagweight])
|
||||||
|
|
||||||
```
|
```
|
||||||
### Go
|
### Go
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// 读取 M 和 N
|
// 读取 M 和 N
|
||||||
var M, N int
|
var M, N int
|
||||||
fmt.Scan(&M, &N)
|
fmt.Scan(&M, &N)
|
||||||
|
|
||||||
costs := make([]int, M)
|
costs := make([]int, M)
|
||||||
values := make([]int, M)
|
values := make([]int, M)
|
||||||
|
|
||||||
for i := 0; i < M; i++ {
|
for i := 0; i < M; i++ {
|
||||||
fmt.Scan(&costs[i])
|
fmt.Scan(&costs[i])
|
||||||
}
|
}
|
||||||
for j := 0; j < M; j++ {
|
for j := 0; j < M; j++ {
|
||||||
fmt.Scan(&values[j])
|
fmt.Scan(&values[j])
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建一个动态规划数组dp,初始值为0
|
// 创建一个动态规划数组dp,初始值为0
|
||||||
dp := make([]int, N + 1)
|
dp := make([]int, N + 1)
|
||||||
|
|
||||||
// 外层循环遍历每个类型的研究材料
|
// 外层循环遍历每个类型的研究材料
|
||||||
for i := 0; i < M; i++ {
|
for i := 0; i < M; i++ {
|
||||||
// 内层循环从 N 空间逐渐减少到当前研究材料所占空间
|
// 内层循环从 N 空间逐渐减少到当前研究材料所占空间
|
||||||
for j := N; j >= costs[i]; j-- {
|
for j := N; j >= costs[i]; j-- {
|
||||||
// 考虑当前研究材料选择和不选择的情况,选择最大值
|
// 考虑当前研究材料选择和不选择的情况,选择最大值
|
||||||
dp[j] = max(dp[j], dp[j-costs[i]] + values[i])
|
dp[j] = max(dp[j], dp[j-costs[i]] + values[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 输出dp[N],即在给定 N 行李空间可以携带的研究材料最大价值
|
// 输出dp[N],即在给定 N 行李空间可以携带的研究材料最大价值
|
||||||
fmt.Println(dp[N])
|
fmt.Println(dp[N])
|
||||||
}
|
}
|
||||||
|
|
||||||
func max(x, y int) int {
|
func max(x, y int) int {
|
||||||
if x > y {
|
if x > y {
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
return y
|
return y
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
Reference in New Issue
Block a user