记录这道题的原因是,有人把这道题当做背包来做。
其实是不是背包可以简单先看看这点: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;
}