for i := 1; i <= n; i++ { fmt.Scanf("%d %d\n", &v[i], &w[i]) }
for i := 1; i <= n; i++ { for j := 0; j <= m; j++ { f[i][j] = f[i-1][j] if j >= v[i] { f[i][j] = max(f[i][j], f[i-1][j-v[i]]+w[i]) } } } fmt.Println(f[n][m]) }
funcoptimize() { /* 1、优化空间复杂度 f[j]:表示容量为j的背包可以获得的最大价值。 转移方程: 1.不选第i件物品。 f[j]=f[j] 2.选择第i件物品。 f[j]=f[j-v[i]]+w[i] 汇总: f[j]=max{f[j],f[j-v[i]]+w[i]} 复杂度: 时间复杂度均为O(N*V) 空间复杂度均为O(V) */ const N = 1010 var n, m int var v, w [N]int var f [N]int
fmt.Scanf("%d %d\n", &n, &m) for i := 1; i <= n; i++ { fmt.Scanf("%d %d\n", &v[i], &w[i]) for j := m; j >= v[i]; j-- { f[j] = max(f[j], f[j-v[i]]+w[i]) } } fmt.Println(f[m]) }