【洛谷】 P1909 买铅笔 c题解

题目地址:

https://www.luogu.com.cn/problem/P1909

根据题目要求,P老师需要购买超过n支铅笔才够给小朋友们发礼物,并且要买同一种包装的铅笔。我们可以通过以下步骤来解决:

1.读取输入,得到需要的铅笔数量n和三种包装的信息。

2.初始化最小花费为一个较大的值,比如1000000000。

3.遍历三种不同的包装,分别计算购买该种包装所需的花费,如果购买的铅笔数量大于等于n,更新最小花费。

4.输出最小花费。

代码如下:

#include <stdio.h>
int main()
{
	int n;
	scanf("%d", &n);

	int cost = 1000000000;//初始化最小花费为一个较大的数
	for (int i = 0; i < 3; i++)
	{
		int pencils, price;
		scanf("%d %d", &pencils, &price);
		int packs = (n + pencils - 1) / pencils;//计算购买该种包装所需的包数
		int currentcost = packs * price;//计算购买该种包装的总花费
		if (currentcost < cost)
		{
			cost = currentcost;//更新最小花费
		}
	}

	printf("%d\n", cost);
	return 0;
}

该代码使用了基础的贪心算法来解决。

贪心算法是一种在每个步骤选择当前最优解的策略,以期望最终得到全局最优解的算法。在该题中,我们需要选择最小花费的包装来购买足够数量的铅笔。

具体来说,我们遍历三种包装,计算购买每种包装所需的包数,并计算总花费。然后,我们更新最小花费,选择最小的花费作为当前最优解。通过这种方式,我们逐步选择最优解,直到遍历完所有的包装。最终,我们得到的最小花费就是全局最优解。

其中,我们通过(n + pencils - 1) / pencils来计算购买某种包装所需的包数。假设铅笔总数为n,每包铅笔的数量为pencils。如果n是pencils的整数倍,那么购买n个铅笔需要n/pencils包。但是,如果不是pencils的整数倍,外卖需要向上取整,即需要n/pencils向上取整的报数。

为了实现向上取整,外卖可以使用(n + pencils - 1) / pencils来计算包数。这样,如果n是pencils的整数倍,那么(n + pencils - 1) / pencils = n / pencils,向上取整和向下取整的结果相同。但是,如果n不是pencils的整数倍,那么(n + pencils - 1) / pencils会向上取整,得到比n / pencils更大的包数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值