C语言贪心算法

给定n种物品和一个背包.物品i的重量是Wi,其价值为Vi,背包的容量为C.在选择物品i装入背包时,可以选择物品i的一部分,1<= i <=n.问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。

 

 [需求分析]

本演示程序用VC编写,输入包的容量各个物品的重量和价值,输出背包中物品的总价值最大时候的物品的重量,价值。

 [概要设计]

定义三个数组用来存放重量,总价和价值,背包先装价值最大的一直到背包的容量不够为止。Swap函数用来把价值最大的从数组的第一位开始存放。



#include <stdio.h>

void swap (double a ,double b) //定义一个交换函数

{

double x;

    x=a;a=b;b=x;

}

int main ()

{

int n,i,j;

double  W,w[100],v[100],s[100],sum=0,k; //三个数组分别代表了重量价值和均价

printf("输入物品的个数和背包的容量:\n");

scanf("%d %lf",&n,&W);

   printf("逐个输入物品的质量:\n");

for (i=0;i<n;i++)

scanf ("%lf",&w[i]);

printf ("逐个输入物品的价值:\n");

for (i=0;i<n;i++)

scanf ("%lf",&v[i]);

for (i=0;i<n;i++)

s[i]=v[i]/w[i];     //均价等于总价除质量

for (i=0;i<n-1;i++)

for (j=0;i<j-1-i;j++)

if (s[j]<s[j])

{

swap (s[j],s[j-1]);  //把均价最高的放在数组第一位,同时总量和价值也交换

swap (w[j],w[j-1]);

swap (v[i],v[i-1]);

 

}

 

for (i=0;W>0;i++)

{

 

if (W>w[i])   //当可以把物品i全部放入时

{

sum+=s[i]*w[i];

W=W-w[i];

}

else

{

sum+=s[i]*W;  //放满背包放i的一部分

k=W;

W=0;

 

}

}

      for (j=0;j<i-1;j++)

  printf ("需要总价为%lf的质量%lf\n",v[j],w[j] );  //输出

  printf("需要总价为%lf的质量%lf\n",v[j],k);

printf ("总价值最大为%lf\n",sum);

return 0;

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值