CodeForces 1555A PizzaForces

这篇博客探讨了一道与背包问题类似的题目,但实际上并非背包问题,因为不同大小的披萨切片所需时间比例相等。对于大规模数据n,通过简化问题规模,将n限制在100范围内,然后使用暴力求解方法遍历所有可能的披萨切片组合,找到最短烹饪时间。博主提供了详细的代码实现,展示了如何在C++中处理此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A题
在这里插入图片描述

记录这道题的原因是,有人把这道题当做背包来做。
其实是不是背包可以简单先看看这点:6,8,10片的Pizza分别需要15,20,25分钟,但单片时间6/15 = 8/20 = 10/25。这种就不是一道背包。
n的数据范围很大,这种题只要在long long 范围内就还没有涉及到高精度,可以这么暴力处理:

if (n>=100)
		{
			long long num=(n-100)/10;
			ans=num*25;
			n=n-num*10;
		}

把问题规模拿到100的范围,再暴力:

long long mins = 1e15;
		for(long long i=0;i<10;i++)
		{
			for(long long j=0;j<10;j++)
			{
				for(long long k=0;k<11;k++)
				{
					if (i*6+j*8+k*10 >= n)
					{
						long long temp = i*15+j*20+k*25;
						mins = min(mins,temp);
					}
				}
			}
		}

最终:

int main()
{
	int t;
//	freopen("in.txt","r",stdin);
	scanf("%d",&t);
	while(t--)
	{
		long long n,ans;
		ans=0;
		scanf("%lld",&n);
		if (n>=100)
		{
			long long num=(n-100)/10;
			ans=num*25;
			n=n-num*10;
		}
		long long mins = 1e15;
		for(long long i=0;i<10;i++)
		{
			for(long long j=0;j<10;j++)
			{
				for(long long k=0;k<11;k++)
				{
					if (i*6+j*8+k*10 >= n)
					{
						long long temp = i*15+j*20+k*25;
						mins = min(mins,temp);
					}
				}
			}
		}
		printf("%lld\n",ans+mins);
	}
	return 0;	
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值