动态规划——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