编辑代码

//偶尔会运行出错,需要多运行几次
#include<stdio.h>
int Zuida(int n1,int n2)
{
    if(n1>n2)
    {
        return n1;
    }
    return n2;
}
int main(){
    int W=5,B=10;//5个物品,背包容量为10
    int v[]={6,5,4,2,1};//物品价值
    int w[]={5,3,5,3,2};//物品重量
    int m[W+1][B+1];
    for(int i=0;i<=W;i++){
        for(int j=0;j<=B;j++)
        {
            m[i][j]=0;
        }
    }
    for(int i=1;i<=W;i++)
    {
        for(int j=1;j<=B;j++)
        {
            if(j>=w[i])
            {
                m[i][j]=Zuida(m[i-1][j],m[i-1][j-w[i]]+v[i]);
            }
            else{
                m[i][j]=m[i-1][j];
            }
        }
    }
    printf("背包物品价值最大为:%d\n",m[W][B]);
    return 0;
}