| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 737 人关注过本帖
标题:背包问题
只看楼主 加入收藏
lanmoqq123
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-12-21
收藏
 问题点数:0 回复次数:1 
背包问题
请各位给我讲解一下关于背包问题的具体怎样应用
搜索更多相关主题的帖子: 背包 应用 讲解 
2006-12-22 21:20
小小宝PP
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-6-30
收藏
得分:0 
#include<stdio.h>
main()
{
float v[]={25,24,15};/*物品价值*/
float w[]={18,15,10};/*物品重量*/
float Ratio[100],temp,temp_v,temp_w,tw,max=0.0;/*Ratio[]是求价值与重量的比值
               temp_v累加物品价值
               temp_w累加物品重量
               max是求得的物品最大价值
               tw表示背包的所能承受的最大重量*/
int i,j,k;
float biao[10];/*这个物品所取的重量之比,1表示全取.0.5表示取二分之一*/
for(k=0;k<10;k++)
  biao[k]=0;
printf("请输入背包的最大容量:tw\n");
scanf("%f",&tw);
for(i=0;i<3;i++)
  Ratio[i]=(v[i]/w[i]);
for(i=0;i<2;i++)/*按照比值将物品价值和重量降序排列*/
{  
    temp=Ratio[i+1];
    temp_v=v[i+1];
    temp_w=w[i+1];
    j=i;
    while(j>-1&&temp>Ratio[j])
    {
     Ratio[j+1]=Ratio[j];
     v[j+1]=v[j];
     w[j+1]=w[j];
     j--;
    }
    Ratio[j+1]=temp;
    v[j+1]=temp_v;
    w[j+1]=temp_w;
}
i=0;
k=0;
    while(tw>0)/*开始取物品.如果能装的一个就全装*/
{   
     if(tw>w[i])/*全装情况*/
  {
     tw=tw-w[i];
     max=max+v[i];
     biao[k++]=1;
     i++;
     }
  else if(tw>0&&tw<=w[i])/*只能装1/n的情况*/
  {
   max=max+((tw/w[i])*v[i]);
   biao[k++]=tw/w[i];
   tw=0;
   i++;
  }
  
}
for(k=0;k<10;k++)/*以下是输出*/
    if(biao[k]!=0)
        printf("%f\t",biao[k]);
printf("\n");
printf("物品的重量是:\n");
    for(k=0;k<10;k++)
  if(biao[k]!=0)
   printf("%f\t",w[k]);
printf("\n");
printf("所取的物品重量是:\n");
for(k=0;k<10;k++)
  if(biao[k]!=0)
   printf("%f\t",biao[k]*w[k]);
printf("\n");
printf("背包所取的重量是:%f\n",max);
}
2010-06-30 16:07
快速回复:背包问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015484 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved