背包问题dp的初步总结
背包问题
01背包
给定的物体只有0个和1个,只有选与不选的划分,其状态转移方程时由i-1行推出,所以第二层循环是由j=m,递减到v[i]的。
 for(int i=1;i<=n;i++){
   for(int j=m;j>=v[i];j--){
      f[j]=max(f[j],f[j-v[i]]+w[i]);
    }
  }
完全背包
给定的物体有无穷多个,可以无限选,其状态转移方程是由i行推出的,所以第二层循环是由j=v[i],递增到m的。
 for(int i=1;i<=n;i++){
   for(int j=v[i];j<=m;j++){
      f[j]=max(f[j],f[j-v[i]]+w[i]);
    }
  }
多重背包
给定的物体有限个,可以从0个选到k个(k<=s[i]),其状态转移方程是由i-1行推出的,所以与01背包类似。其后也时优化成01背包问题的。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号