贪心算法求可拆背包问题

//  可拆背包问题,c741 
#include <stdio.h>
#define N 100
void main()
{float p[N],w[N],x[N],c,cw,s,h;
 int i,j,n;
 printf("\n input n:"); scanf("%d",&n);      //  输入已知条件  
 printf("input c:"); scanf("%f",&c);
 for(i=1;i<=n;i++)
    {printf("input w%d,p%d:",i,i);
     scanf("%f,%f",&w[i],&p[i]);
    }
for(i=1;i<=n-1;i++)     //  对n件物品按单位重量的效益从大到小排序 
for(j=i+1;j<=n;j++)
   if(p[i]/w[i]<p[j]/w[j])
     { h=p[i];p[i]=p[j]; p[j]=h;
       h=w[i];w[i]=w[j]; w[j]=h;
     }
cw=c;s=0;                        // cw为背包还可装的重量 
for(i=1;i<=n;i++)
{if(w[i]>cw) break;
   x[i]=1.0;                     //  若w(i)<=cw,整体装入
   cw=cw-w[i];
   s=s+p[i];
}
x[i]=(float)(cw/w[i]);            //  若w(i)>cw,装入一部分x(i) 
s=s+p[i]*x[i];
printf("装包:");                 //  输出装包结果 
for(i=1;i<=n;i++)
  if(x[i]<1)  break;
  else
    printf("\n 装入重量为%5.1f效益为%5.1f的物品.",w[i],p[i]);
if(x[i]>0 && x[i]<1)
    printf("\n 装入重量为%5.1f效益为%5.1f的物品百分之%5.1f.",w[i], p[i],x[i]*100);
printf("\n 所得最大效益为:%7.1f ",s);
}

 

 

 

 

转载于:https://www.cnblogs.com/liao-pxsoftware15/p/8159232.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值