HDU 1009

题目描述:

        HDOJ 1009

分析:

        最简单的贪心算法的应用。
        由于可以购买一个房间中的部分JavaBeans,直接将所有的JavaBeans按单价由高到低排序,然后贪心购买即可。最后购买的那个房间可能只购买其中的一部分JavaBeans。

源码:

#include <stdio.h>
void bubbleSort(float price[], int J[], int F[], int N);
main()
{
	int M, N;
	int J[1000], F[1000];    //JavaBeans和cat food的重量
	float price[1000];       //JavaBeans的单价
	scanf("%d%d", &M, &N);
	float result;
	while (!(M==-1 && N==-1))
	{
		for (int i = 0; i < N; i ++)
		{
			scanf("%d%d", &J[i], &F[i]);
			price[i] = (float)F[i] / (float)J[i];
		}
		//按单价由低到高对所有仓库进行排序
		bubbleSort(price, J, F, N);

		int sumF = 0, sumJ = 0;
		for (int i = 0; i < N; i ++)
			sumF = sumF + F[i];
		for (int i = 0; i < N; i ++)
			sumJ = sumJ + J[i];
		//如果cat food足够多,则可以买下全部的JavaBeans
		if (M >= sumF)
			result = sumJ;
		//cat food只能买一部分仓库中的JavaBeans,贪心购买
		else
		{
			result = 0;
			int i = 0;
			while (M > 0)
			{
				if (M > F[i])
				{
					result = result + J[i];
					M = M - F[i];
					i ++;
				}
				else
				{
					result = result + (float)M / (float)F[i] * (float)J[i];
					M = 0;
				}
			}
		}
		printf("%.3f\n", result);

		scanf("%d%d", &M, &N);
	}
}

void bubbleSort(float price[], int J[], int F[], int N)
{
	float floatTemp;
	int intTemp;
	for (int i = 0; i < N-1; i ++)
	{
		for (int k = N-1; k > i; k --)
		{
			if (price[k] < price[k-1])
			{
				floatTemp = price[k];
				price[k] = price[k-1];
				price[k-1] = floatTemp;

				intTemp = J[k];
				J[k] = J[k-1];
				J[k-1] = intTemp;

				intTemp = F[k];
				F[k] = F[k-1];
				F[k-1] = intTemp;
			}
		}
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值