背包问题 (Knapsack.cpp)

背包问题

 (Knapsack.cpp)

【题目描述】

给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。

 

【解题思路】

运用贪心算法,每次挑选目前单价最高且重量未超过背包剩余容量的物品。允许装入物品的一部分。

【输入】

输入Knapsack.in中第一行包含2个整数,前一个是物品的数目n,后一个为背包的最大容量;以下n行的每一行是某个物品的名称、金额和重量。

【输出】

输出Knapsack.out如输出样例,为价格最高的背包方案,即单价由大到小所装物品的清单。结果保存两位小数.

【输入输出样例1】

Knapsack.in

Knapsack.out

5  15.0

AAA  4.0  12.0

BBB  2.0  2.0

CCC  2.0  1.0

DDD  1.0  1.0

EEE  10.0  4.0

EEE:4.00Kg

CCC:1.00Kg

BBB:2.00Kg

DDD:1.00Kg

AAA:7.00Kg

Total price:17.33

#include 
#include 
typedef  struct
  { char name[16];  // 名称
    double p;      // 价值
    double w;      // 重量
    double r;      // 单价
  }good;

int main()
{
	int n, i, j, k;
	good *G, temp;
        double C;	// 存储背包的最大容量
	double value=0;	// 背包当前所装物品总价

	  scanf("%d",&n);//输入商品的数量
	  scanf("%lf",&C);//输入背包的最大容量
 
   G = new good[n];
   for(i=0; i=C)
	 {
		  printf("%s:%.2lfKg\n",G[i].name,C);  
		  value+=G[i].r*C;
		  break;
	 }
	 else
	 {
		  printf("%s:%.2lfKg\n",G[i].name,G[i].w);  
		  value+=G[i].p;
		  C-=G[i].w;
	 }
  }

   printf("Total price:%.2lf",((int)(100*value+0.5))*0.01);
   return 0;
}


猜你喜欢

转载自blog.csdn.net/AengusChen/article/details/76388858