0-1背包(贪婪法)

#include "stdio.h"
#define MAX 100
sort(int n,float a[MAX],float b[MAX])
{
 int j,p,h,k,q;
 float t1,t2,t3,c[MAX];

 for(k=1;k<=n;k++)
  c[k]=a[k]/b[k];
q=1;
// for(h=n ;h>1;h=p)
 for(h=1;h<=n;h++)
 {
  for(j=1;j<n;j++)
//  for(p=j=1;j<h;j++)
  if(c[j]<c[j+1])
  {
   t1=a[j];a[j]=a[j+1];a[j+1]=t1;
   t2=b[j];b[j]=b[j+1];b[j+1]=t2;
   t3=c[j];c[j]=c[j+1];c[j+1]=t3;
  // p=j;
  }
 }
 p=j;
}

knapsack(int n,float limitw,float v[MAX],float w[MAX],int x[MAX])
{
 float c1;
 int i;
 sort(n,v,w);
 c1=limitw;
 for(i=1;i<=n;i++)
 {
 if(w[i]>c1) break;
 x[i]=1;
 c1-=w[i];

 }
}


main()
{
 int n,i,x[MAX];
 float v[MAX],w[MAX],totalv=0,limitw;
 printf("please input n and limitw:");
 scanf("%d%f",&n,&limitw);
 for(i=1;i<=n;i++) x[i]=0;
 for(i=1;i<=n;i++)
 {
  printf("please input %d thing's value and weight:/n",i);
  scanf("%f%f",&v[i],&w[i]);
 }
   
 knapsack(n,limitw,v,w,x);
 printf("the selection is:/n");
 for(i=1;i<=n;i++)
 {
  printf("%d,",x[i]);
  totalv+=v[i]*x[i];
 }
 printf("/n");
 printf("the total value is: %f",totalv);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值