0-1背包问题C语言

动态规划思想编程实现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”);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值