动态规划思想编程实现0-1背包问题
#include<stdio.h>
#include<stdlib.h>
//用动态规划思想编程实现0-1背包问题。物品数n=5,背包容量c=10,物品重量序列w={2,2,6,5,4},物品价值序列v={6,3,5,4,6}。求最佳装包序列。
int w[5] = {2,2,6,5,4};
int v[5] = {6,3,5,4,6};
int x[5];
int n = 5;
int c=10;
int max(int i,int a, int b);
int bag(int i,int j);
int max(int i,int a, int b)
{
if (a >= b) {return a;}
else{x[i]=1;return b;}
}
int bag(int i,int j)
{
if(i==n){
if(j>=w[n]) {x[i]=1;return v[n];}
if(0<=j&&j<w[n]) {x[i]=0;return 0;}
}
if(j>=w[i]){return max(i,bag(i+1,j),bag(i+1,j-w[i])+v[i]);}
if(0<=j&&j<w[i]) {x[i]=0;return bag(i+1,j);}
}
void main()
{
int maxValue=0;
maxValue =bag(0,c);
printf(“物品装载方案如下:\n”);
for(int i=0;i<n;i++){
printf("%d",x[i]);
}
printf("\n最大物品价值为:%d",maxValue);
system(“pause”);
}