了解0 1 背包问题
C语言代码
#define M 10
#define N 5
#include<stdio.h>
int main(){
int i,j;
int value[N+1][M+1];
int wight[N+1]={0,4,5,6,2,2};
int price[N+1]={0,6,4,5,3,6};
for(i=0;i<N+1;i++){
for(j=0;j<M+1;j++){
value[i][j]=0;
}
}
for(i=1;i<N+1;i++){
for(j=1;j<M+1;j++){
if(j<wight[i]){
value[i][j]=value[i-1][j];
}else if(value[i-1][j-wight[i]]+price[i]>value[i-1][j]){
value[i][j]=value[i-1][j-wight[i]]+price[i];
}else{
value[i][j]=value[i-1][j];
}
}
}
for(i=1;i<=N;i++){
for(j=1;j<=M;j++){
printf("%4d",value[i][j]);
}
printf("\n");
}
return 0;
}
原理
value[i][j]=max{value[i-1][j-wight]+price[i],value[i-1][j]}