01背包二维数组

假设一个小偷偷珠宝店,拿了一个承重20的背包,求能偷得最大价值
重 价
2 3
3 4
4 5
5 8
9 1

最大价值 23
https://www.bilibili.com/video/av36136952?from=search&seid=11644509251735546077
是这个视频里面人讲的例题,挺好理解的,可以去看看。

#include
#define N 5
#define M 7
int B[N][M]={0};
int w[5]={0,1,2,3,2};
int v[5]={0,4,6,12,7};
void aaa()
{
    int i,j;
    for(i=1;i<=N;i++)
        for(j=1;j<=M;j++)
        if(w[i]>j)
    {
        B[i][j]=B[i-1][j];//表示物体太重放不进背包
    }
    else
    {
        int v1=B[i-1][j-w[i]]+v[i];//放进去的情况下,
        						//减去物体的重量,加上物体的价值
        int v2=B[i-1][j];//不放进去的情况
        if(v1>v2)
            B[i][j]=v1;
        else
            B[i][j]=v2;//选择价值大的
    }

}
int main()
{
    aaa();
    printf("%d\n",B[4][6]);
    return 0;
}

你可能感兴趣的:(01背包二维数组)