摘要:        
描述:有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。变式:有的物品能只有1个,有的物品有多个。状态转移方程:dp[i][j]=max{dp[i][j],dp[i-1][j-c[i]*k]+w[i]*k}//0s){ total++; w[total]=w[i]*s; c[total]=c[i]*s n[i]=n[i]-s; s=s*2; }	w[i]=n[i]*i;}空间优化后的0...    阅读全文
posted @ 2013-08-02 19:48
little_w
阅读(526)
评论(1)
推荐(2)
        
            
        
        
摘要:        
一、01背包问题简述:n种物品,每种一个,选或不选随你,背包一定有容量,求不超过容量的情况下,价值最大。递归方程:dp[i][v]=max{dp[i][v],dp[i-1][v-c[i]]+w[i]}我们要注意的是下一次背包放I个物品的状态的可达性必然要满足上一次放I-1个物品时的可达性,觉得数学归纳法可以证明出来。所以这里有个隐含的判断,就是初始时memset(dp,0,sizeof(dp));在这里已经将dp清零,所以我们可以认为在dp==0是,这一节点是没有被访问到的。因为我们取得是大的值,自然0的情况怎么都不会被选中。递推表示:memset(dp,0,sizeof(dp));for(i    阅读全文
posted @ 2013-08-02 15:40
little_w
阅读(413)
评论(0)
推荐(0)
        
 
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号