PizzaForces(思维)

题目链接
在这里插入图片描述


大意:

有三种披萨:小披萨:6块,需要15分钟;中披萨:8块,需要20分钟;大披萨:10块,需要25分钟。
现在来了n个客人,每个人至少1块,至少需要多少分钟?( n < = 1 0 16 n<=10^{16} n<=1016)

思考:

看起来好像完全背包,但是数据太大,不能这样做。
既然是完全背包的题,而且又不能用完全背包做,那就一定有这个题目独特的性质。需要利用这个性质来做。

我们发现,不管是小披萨,中披萨还是大披萨,每一块烘培所需要的时间都是2.5分钟!
所以一个数n,只要能用6,8,10分解掉,其花费的时间就是 n ∗ 2.5 n*2.5 n2.5.
如果不能正好分解掉,就要剩下的块数最少,用6,8,10能组成的,第一个大于n的数 ∗ 2.5 *2.5 2.5

那么,哪些数能恰好用6,8,10分解呢?
6,8,10,6+6,6+8,6+10,8+10,10+10,10+6+6,10+6+8,10+6+10…
6,8,10,12,14,16,18,20,22,24,26…
偶数!

实现:

如果n是偶数,那好,恰好分解,最少时间花费: n ∗ 2.5 n*2.5 n2.5
如果n是奇数,则要烘培n+1块,恰好分解,最少时间花费: ( n + 1 ) ∗ 2.5 (n+1)*2.5 (n+1)2.5

Code:

#include<iostream>
using namespace std;

const int N=10010;
long long n,m,T;

int main(){
	cin>>T;
	while(T--)
	{
		cin>>n;
		if(n<=6){
			cout<<15<<endl;
			continue;
		}
		
		if(n%2) n++;
		cout<<n*5/2<<endl;
	}
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值