您的位置:首页 > 其它

背包问题 顺推解法

2007-08-19 16:38 405 查看
 五种物品,体积,重量,数量,价值分别如下:

物品编号   体积    重量    数量    价值

1                  30       3        10         4

2                  50       8        10        5

3                  10       2        10        2

4                   23      5         8          3

5                   130    20       5          11

 

限制体积最多500,重量最多100。问能带上物品最大总价值是多少??

 

 


#include<iostream.h>


#include<string.h>




int f[6][501][101];


int state[6][501][101];




void main()




...{




    int v[6] = ...{0,30,50,10,23,130};




    int w[6] = ...{0,3,8,2,5,20};




    int c[6] = ...{0,10,10,10,8,5};




    int t[6] = ...{0,4,5,2,3,11};




    const int maxv = 500;


    const int maxw = 100;


    const int maxn = 5;


    


    int i ;


    int n,x,y;




    memset(f,0,sizeof(f));


    memset(state,0,sizeof(state));




    for(n = 1 ; n <=maxn ; ++n)


        for(x =1 ; x <= maxv ; ++x)


            for( y = 1 ; y <= maxw ; ++y)




            ...{


                //计算最大i


                int maxi = c
;


                if(x / v
 < maxi) 


                    maxi = x/v
;


                if(y / w
 < maxi)


                    maxi = y / w
;




                for(i = 0; i <=maxi ;++i)




                ...{


                    if(f[n-1][x- i * v
][y - i * w
] + i*t
 >  f
[x][y])




                    ...{


                        f
[x][y] = f[n-1][x- i * v
][y - i * w
] + i*t
;


                        state
[x][y] = i;


                    }


                }                


            }     




    int ans= 0 ;


    int xx, yy;


    for( x =0 ; x < maxv; ++x)


        for( y = 0 ; y < maxw ; ++y)




        ...{


            if(f[maxn][x][y] > ans)




            ...{


                ans = f[maxn][x][y];


                xx=  x;


                yy = y;


            }


        }


    cout<<ans<<endl<<endl;




    for(i = maxn ; i >=1 ; --i)




    ...{


        int tmp = state[i][xx][yy];


        cout<<tmp<<endl;


        xx = xx - tmp * v[i];


        yy = yy - tmp * w[i];


    }


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string c