大意:
有三种披萨:小披萨: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
n∗2.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
n∗2.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;
}