[적용한 알고리즘]
DP
[아이디어]
dp[i] : i 번째 건물까지 지었을 때 비용의 최솟값
으로 정해놓고 생각하자,
[생각의 흐름 / 절차]
dp[i] = min(dp[i], dp[j - 1] + cost) 이고
cost : j ~ i 까지 기지국 비용
[교훈]
내용
<코드>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
int n; scanf("%d", &n);
vector<pair<int, int>> P(n + 1);
for (int i = 1; i <= n; i++){
scanf("%d %d", &P[i].first, &P[i].second);
if (P[i].second < 0){
P[i].second *= -1;
}
}
sort(P.begin() + 1, P.end());
vector<int> dp(n + 1, 100000000);
dp[0] = 0;
for (int i = 1; i <= n; i++){
int up = 0;
for (int j = i; j >= 1; j--){
up = max(up, P[j].second); // 다 커버쳐야하니까
int square = max(P[i].first - P[j].first, up * 2);
dp[i] = min(dp[i], dp[j - 1] + square);
}
}
printf("%d\n", dp[n]);
return 0;
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 5557번 1학년 (0) | 2020.01.01 |
---|---|
[백준] 2229번 조 짜기 (0) | 2020.01.01 |
[백준] 10282번 해킹 (0) | 2019.12.28 |
[백준] 6118번 숨바꼭질 (0) | 2019.12.28 |
[백준] 1725번 히스토그램 (0) | 2019.12.27 |