当前位置:编程学习 > 网站相关 >>

背包问题求解总结

 背包承重为10,价值是V的物品,重量为W,求解装的最大价值
 
 C=10           
i V W          
1 10 2  最优解:60       
2 20 4          
3 30 6          
4 40 5          
10到0的最大价值初始都为0         
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
0 0 0 0 0 0 0 0 0 0 0  
for (i = 1; i <= 4; i++)         
{            
    for (int c = 10; c >= c[i]; c--)        
    {            
        if(f[c - weightArray[i]] + valueArray[i] >= f[c])     
        {           
            f[c]=f[c - weightArray[i]] + valueArray[i];      
        }           
    }            
}            
 f[c - weightArray[i]] + valueArray[i]      f[c] 
i=1 weightArray[i]=2   valueArray[i]=10    
c=10 f[8] + 10 = 10     >= f[10] = 0   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
10 0 0 0 0 0 0 0 0 0 0  
c=9 f[7] + 10 = 10     >= f[9] = 0   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
10 10 0 0 0 0 0 0 0 0 0  
c=8 f[6] + 10 = 10     >= f[8] = 0   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
10 10 10 0 0 0 0 0 0 0 0  
c=7 f[5] + 10 = 10     >= f[7] = 0   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
10 10 10 10 0 0 0 0 0 0 0  
c=6 f[4] + 10 = 10     >= f[6] = 0   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
10 10 10 10 10 0 0 0 0 0 0  
c=5 f[3] + 10 = 10     >= f[5] = 0   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
10 10 10 10 10 10 0 0 0 0 0  
c=4 f[2] + 10 = 10     >= f[4] = 0   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
10 10 10 10 10 10 10 0 0 0 0  
c=3 f[1] + 10 = 10     >= f[3] = 0   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
10 10 10 10 10 10 10 10 0 0 0  
c=2 f[0] + 10 = 10     >= f[2] = 0   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
10 10 10 10 10 10 10 10 10 0 0  
            
            
            
i=2 weightArray[i]=4   valueArray[i]=20    
c=10 f[6] + 20 = 30     >= f[10] = 10   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
30 10 10 10 10 10 10 10 10 0 0  
c=9 f[5] + 20 = 30     >= f[9] = 10   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
30 30 10 10 10 10 10 10 10 0 0  
c=8 f[4] + 20 = 30     >= f[8] = 10   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
30 30 30 10 10 10 10 10 10 0 0  
c=7 f[3] + 20 = 30     >= f[7] = 10   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
30 30 30 30 10 10 10 10 10 0 0  
c=6 f[2] + 20 = 30     >= f[6] = 10   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
30 30 30 30 30 10 10 10 10 0 0  
c=5 f[1] + 20 = 20     >= f[5] = 10   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
30 30 30 30 30 20 10 10 10 0 0  
c=4 f[0] + 20 = 20     >= f[4] = 10   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
30 30 30 30 30 20 20 10 10 0 0  
            
            
i=3 weightArray[i]=6   valueArray[i]=30    
c=10 f[4] + 30 = 50     >= f[10] = 30   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
50 30 30 30 30 20 20 10 10 0 0  
c=9 f[3] + 30 = 40     >= f[9] = 30   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
50 40 30 30 30 20 20 10 10 0 0  
c=8 f[2] + 30 = 40     >= f[8] = 30   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
50 40 40 30 30 20 20 10 10 0 0  
c=7 f[1] + 30 = 30     >= f[7] = 30   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
50 40 40 30 30 20 20 10 10 0 0  
c=6 f[0] + 30 = 30     >= f[6] = 30   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
50 40 40 30 30 20 20 10 10 0 0  
            
            
i=4 weightArray[i]=5   valueArray[i]=40    
c=10 f[5] + 40 = 60     >= f[10] = 50   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
60 40 40 30 30 20 20 10 10 0 0  
c=9 f[4] + 40 = 60     >= f[9] = 40   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
60 60 40 30 30 20 20 10 10 0 0  
c=8 f[3] + 40 = 50     >= f[8] = 40   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
60 60 50 30 30 20 20 10 10 0 0  
c=7 f[2] + 40 = 50     >= f[7] = 30   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
60 60 50 50 30 20 20 10 10 0 0  
c=6 f[1] + 40 = 40     >= f[6] = 30   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
60 60 50 50 40 20 20 10 10 0 0  
c=5 f[0] + 40 = 40     >= f[5] = 20   
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]  
60 60 50 50 40 40 20 10 10 0 0  
   
   
   
   
   
 C=10  
i V W 
1 10 2  最优解:60
2 20 4
3 30 6
4 40 5
 
f[10] f[9] f[8] f[7] f[6] f[5] f[4] f[3] f[2] f[1] f[0]
60 60 50 50 40 40 20 10 10 0 0 
 
承重10的最大价值60
 
求解思路理解:  把所有的承重的最大值算出来
 
   
补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,