贪心思想编程实现背包问题 C语言

#include<stdio.h>
#include<stdlib.h>
//用贪心思想编程实现背包问题。物品数n=5,背包容量c=10,物品重量序列w={2,2,6,5,4},物品价值序列v={6,3,5,4,6}。求最佳装包序列。
struct bagObject
{
int id;
double w;
double v;
double wv;
};
struct bagObject bag[5]={{1,2,6,0},{2,2,3,0},{3,6,5,0},{4,5,4,0},{5,4,6,0}};
double x[5]={0};//最佳装包
int n = 5;//物品数n=5
double c=10;//背包容量c=10
double function();

double function()//0,c
{ double value=0,j=c;//初始价值0,容量10
int i=0;
for(;i<n,j>0;i++){
if(j-bag[i].w>0){
value=value+bag[i].v; j=j-bag[i].w; x[bag[i].id-1]=1;
}else{
value=value+j*bag[i].wv; x[bag[i].id-1]=j/bag[i].w; return value;
}
}
return 0;
}

void main()
{
struct bagObject temp;
for(int i=0;i<n;i++){//算性价比
bag[i].wv=bag[i].w/bag[i].v;
}
/for(int i=0;i<n;i++){
printf(“物品id为:%d”,bag[i].id);
printf(“物品w为:%f”,bag[i].w);
printf(“物品v为:%f”,bag[i].v);
printf(“物品wv为:%f\n”,bag[i].wv);
}//测试1用
/
for(int i=0;i<n;i++){//排序
for(int j=i;j<n;j++){
if(bag[i].wv<bag[j].wv){
temp=bag[i];
bag[i]=bag[j];
bag[j]=temp;
}
}
}
/for(int i=0;i<n;i++){
printf(“物品id为:%d”,bag[i].id);
printf(“物品w为:%f”,bag[i].w);
printf(“物品v为:%f”,bag[i].v);
printf(“物品wv为:%f\n”,bag[i].wv);
}//测试2用
/
double maxValue =function();
printf(“物品装载方案如下:\n”);
for(int i=0;i<n;i++){
printf("%f\t",x[i]);
}
printf("\n最大物品价值为:%f",maxValue);
system(“pause”);
}
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值