followingturing 追随图灵的路上...

悉心求学,博采众长;寡言广学,先博后渊。

用c实现背包问题(贪心)

好久以前做的一个程序,贪心策略实现背包问题,c实现。

总结在这里,以备以后和别人查找。

//背包问题

#include "stdio.h"
#define MAX 10
void main()
{
 int w[MAX]={0,10,130,15,60,25};      //存放质量
 int v[MAX]={0,30,5,10,20,25};   //存放价值
 float a[MAX]={0};  //存放取的量,即输出结果。
 int m,n,i,max;
 m=100;n=5;
 /*
   
    scanf("%d %d",&m,&n);
     for(i=1;i<=n;i++)
      scanf("%d",&w[i]);    //重量和价值都从1号开始存,零号(=0)空下,一会做max
     for(i=1;i<=n;i++)
      scanf("%d",&v[i]);*/
   

 for(i=1;i<=n;i++)
  printf("%d: %d    ",w[i],v[i]);
 do{
  max=0;
  for(i=1;i<=n;i++)
   if(v[i]>v[max])
   {
    max=i;
   }
   v[max]=0;
  if(m>=w[max])   //如果够放。
  {
   m-=w[max];
   a[max]=1;
  }
  else
  {
               //这样得到一个负值,就会do while跳出循环。
   a[max]=((float)m)/w[max];
   m-=w[max];
  }
 }while(m>0);

 printf("/nThe result is:/n");
 for(i=1;i<=n;i++)
  printf("%f  ",a[i]);

 
}

阅读更多
文章标签: c float
想对作者说点什么? 我来说一句

0-1背包问题贪心算法(C++实现)

2008年03月27日 2KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭