[백준 15115] Delayed Work (C#, C++) - soo:bak
작성일 :
문제 링크
설명
페인터 수를 정해 작업 비용과 지연 패널티 합이 최소가 되도록 하는 문제입니다.
접근법
고용 인원 M이 늘면 인건비는 증가하고, 작업 시간은 줄어 패널티가 감소합니다.
M이 정수이므로 일정 범위의 M을 모두 확인해 최소값을 찾으면 됩니다.
비용은 M*X + (K/M)*P 형태이며, M은 1부터 적당히 넓은 범위에서 검사하면 충분합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
class Program {
static void Main() {
var parts = Console.ReadLine()!.Split();
var k = double.Parse(parts[0]);
var p = double.Parse(parts[1]);
var x = double.Parse(parts[2]);
var best = double.MaxValue;
for (var m = 1; m <= 100000; m++) {
var cost = m * x + (k / m) * p;
if (cost < best) best = cost;
}
Console.WriteLine(best.ToString("0.000"));
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
double k, p, x;
cin >> k >> p >> x;
double best = 1e100;
for (int m = 1; m <= 100000; m++) {
double cost = m * x + (k / m) * p;
if (cost < best) best = cost;
}
cout << fixed << setprecision(3) << best << "\n";
return 0;
}