0-1揹包代码:
#include <stdio.h>
void pack(int n,int c,int *w,int *v){
int m,l;
m=n+1;
l=c+1;
int f[m][l];
int i,j,a,b;
for(i=0;i<=n;i++)
for(j =0;j<=c;j++)
f[i][j]=0;
for(i=1;i<=n;i++){
for(j=1;j<=c;j++){
if(w[i]>j){
f[i][j]=f[i-1][j];
}else{
a=f[i-1][j-w[i]]+v[i];
b=f[i-1][j];
f[i][j]=a>b?a:b;
}
}
}
for(i=0;i<=n;i++)
for(j =0;j<=c;j++)
printf("%d\n",f[i][j]);
printf("%d\n%d\n",i,j);
printf("%d",f[i][j]);
}
int main(){
//挑选n个商品,容量为c
int n=5,c=10;
//5件商品,每个商品的重量w数组,对应的价值v数组,下标0不代表商品。
int w[6], v[6];
for(int i=0;i<=n;i++)
scanf("%d",&w[i]);
for(int j=0;j<=n;j++)
scanf("%d",&v[j]);
pack(n,c,w,v);
}