其他分享
首页 > 其他分享> > 动态规划——0-1背包

动态规划——0-1背包

作者:互联网

给定n个物品和一背包,物品i的重量是wi,其价值为vi,背包的容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大?

主要就是考虑背包剩余的容量,以及要不要放入物品

#include<stdio.h>
int max(int a,int b){
    if(a>b)return a;
    return b;
}
void value(int *w,int *v,int n,int c){
    int m[n+1][c+1];
    for(int i=0;i<=n;i++){
        m[i][0]=0;
    }
    for(int i=0;i<=c;i++){
        m[0][i]=0;
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=c;j++){
            if(j<w[i-1]){
                m[i][j]=m[i-1][j];
            }
            else{
                m[i][j]=max(m[i-1][j],m[i-1][j-w[i-1]]+v[i-1]);
            }
        }
    }
    printf("%d",m[n][c]);
}
int main(){
    int n,c;
    scanf("%d %d",&n,&c);
    int w[n],v[n];
    for(int i=0;i<n;i++){
        scanf("%d %d",&w[i],&v[i]);
    }
    value(w,v,n,c);
} 

 

标签:背包,return,容量,int,装入,物品,动态,规划
来源: https://www.cnblogs.com/Celiachen/p/14818059.html