题目描述
小码哥谈恋爱了!但是他更喜欢玩派派,当他玩完派派时发现已经x点x分了,由于一直不回女朋友消息,女朋友现在的怒气值为 m m m,为了赔偿女朋友,他要去给女朋友买礼物,每过一分钟女朋友的怒气值会上升 k k k,而小码哥可以在任意时间去买礼物(假设买礼物不花费时间),每个礼物花费 q q q元,可以抵消 p p p个怒气值,而商店从21:00开始打折25%,请你帮助小码哥找出最小花费的金额就可以让女朋友消气(女朋友消气代表她怒气值小于或等于0),保证题中所给数据均合法。
输入格式:
第一行输入两个数字代表当前小时数(00 ~ 23)和分钟数(00 ~ 59)
第二行分别输入m,k,q,pm,k,q,p,
1
≤
m
≤
1
0
4
,
1
≤
k
,
q
,
p
≤
1
0
2
1 ≤ m ≤ 10^{4},1 ≤ k,q,p ≤ 10^{2}
1 ≤ m ≤ 104,1 ≤ k,q,p ≤ 102。
输出格式:
输出所需最少钱数(保留四位小数)
输入样例
21 00
100 1 6 5
输出样例
90.0000
分析
其实最优解只有两个策略,要么一开始就把礼物买完,计算此时的利润 c 1 c1 c1,要么拖到晚上9点买计算此时的利润 c 2 c2 c2,二者的最小值就是最少花销。
#include<bits/stdc++.h>
using namespace std;
int n,m,k,q,p,x,hh,mm;
int cal(int hh,int mm) //计算当前时间离晚上9点有多少
{
int s=21*60;
return s-hh*60-mm;
}
int main()
{
cin>>hh>>mm;
cin>>m>>k>>q>>p;
int tot=cal(hh,mm);
tot=max(0,tot)*k; //到晚上9点女友要增加多少怒气
int x1=ceil(1.0*(m+tot)/p); //全部在晚上9点后买礼物要至少买几个
double c1=q*0.75*x1;
int x2=ceil(1.0*m/p); //一开始就买礼物至少买几个
double ans=q*x2;
ans=min(c1,ans); //二者最小值就是答案
printf("%.4lf",ans);
return 0;
}