BOJ 3343 - 장미
집의 개수 와 가격 , 집의 개수 와 가격 라 하자.
집의 꽃을 사는 묶음 수를 , 집의 꽃을 사는 묶음 수를 라 하자.
그리고 총 가격은
위 부등식을 에 대해 나타내면
이므로 가 정해지면 는 여야 한다.
이제 가 항상 더 가성비가 안좋다고 해보자.
를 봤을 때, 이 만큼의 그룹은 항상 더 가성비가 좋은 로 사는게 이득이다.
그럼 를 최대 개 까지 사는것만 확인하고 나머지는 로 채워주는것이 항상 최적이다.
를 개 사버리면 그건 그냥 를 개 사는게 더 이득이라 항상 손해기 때문이다.
이므로 브루트포스로 이 문제를 해결할 수 있다.
void solve() {
int n;
// <개수, 가격>
pi a, b;
cin >> n >> a.fi >> a.se >> b.fi >> b.se;
auto get_v = [&](int u) {
return max(0ll, (n - a.fi * u + b.fi - 1) / b.fi);
};
auto get_cost = [&](int u) {
int v = get_v(u);
return u * a.se + v * b.se;
};
int ans = 2e18;
for (int u = 0; u <= min((n + a.fi - 1) / a.fi, 999999ll); u++) ans = min(ans, get_cost(u));
swap(a, b);
for (int u = 0; u <= min((n + a.fi - 1) / a.fi, 999999ll); u++) ans = min(ans, get_cost(u));
cout << ans;
}
Comments