看到这题让我想到了小学的学生外出乘车选车。
分析:
定义 (x) , (y) 分别是第一家和第二家店一朵玫瑰花的价格,
先只买每朵价格比较小的一家店,记录为 (ans) 。
再计算两家店每束花的最小公倍数确定枚举次数,
然后枚举更换每束花后的价格来跟 (ans) 进行比较。更新 (ans) 。
光说不行,得上代码:
#include "cstdio"
#include "algorithm"
#include "iostream"
long long n, a1, a2, b1, b2, ans, go;
int main() {
std::cin >> n >> a1 >> b1 >> a2 >> b2;
long double x = b1 * 1.0 / a1, y = b2 * 1.0 / a2;
if (x < y)
std::swap(a1, a2), std::swap(b1, b2);//为了方便之后的枚举
ans = (n + a2 - 1) / a2 * b2;
go = a2 / std::__gcd(a1, a2);
for (long long i = go; i >= 0; i--) {
long long t = i * b1;
if (n - i * a1 >= 0)
t = t + (n - i * a1 + a2 - 1) / a2 * b2;
ans = std::min(ans, t);
}
std::cout << ans;
return 0;
}
(small{Valentine 是人赢。})