go解题答案

  • 思路概括:动态规划

  • 思路核心:
    1、转移变量为商品和体积,值是最大重量
    2、d[i][j] 表示 经过挑选i轮商品在j体积下最大值,此时并不一定只有i商品
    3、转移方程为 case1:如果体积不够这一次的商品,则等于上一次的最佳方案 d[i][j]=d[i-1][j]
    4、case2:如果体积够这一次的商品,则等于上一轮时让出这次商品的体积最佳值d[i-1][j-vw[i-1][0]]+这次的值vw[i-1][1]

    func knapsack( V int ,  n int ,  vw [][]int ) int {
      // write code here
      if V==0||n==0|| vw==nil {
          return 0
      }
    
       d := make([][]int, n+1)
    
      for k := 0;k < n+1; k++ {
          d[k] = make([]int, V+1) // 要初始化,否则空指针注意从1开始,所以是V+2
      }
      for i:=1;i<=n;i++{
          for j:=1;j<=V;j++{
              if j<vw[i-1][0]{
                  d[i][j]=d[i-1][j]
              }else{
                  a:=d[i-1][j] // 不放的结果
                  b:=d[i-1][j-vw[i-1][0]]+vw[i-1][1] //  放的结果
                  d[i][j]= Max(a,b) //转移方程
    
              }
    
          }
      }
      return d[n][V]
    }

    如果有帮助请点个赞哦, 更多文章请看我的博客

    题主背景

  • 从业8年——超级内卷500Q技术经理——目前专注go和微服务架构