티스토리 뷰
문제
덧셈의 minimal cost구하기 문제
Greedy하게 풀린다.
왜 Greedy하게 풀리는지 마지막 step부터 생각해보자.
마지막 step을 생각해보면 두개의 계산된 덩어리를 더할거고 그럼 cost가 발생할거다.
근데 차피 생기는 cost는 덩어리를 어떻게 나누든 동일하다.(주어진 수들의 최종 sum이 되니까)
따라서 두 개의 덩어리는 각각이 optimal cost를 가져야한다. 따라서 각 덩어리에서 max인 계산은 무조건 나중에 돼야한다. 따라서 min인 계산부터 해나가야 하니까 그 때 그 때 보이는 minimum계산부터 해나가면 된다.
이건 비단 마지막 step에만 해당되는게 아니라 어떤 덩어리를 만들었을 때도 동일할거다.
라고 생각했는데 솔직히 왜 Greedy하게 풀리는지 잘 안 와닿는다.
답은 다음과 같다.
#include<iostream>
#include<queue>
using namespace std;
int main() {
int n, temp, cost;
while (cin >> n && n != 0) {
priority_queue<int,vector<int>,greater<int> > PQ;
cost = 0;
for (int i = 0; i < n; i++) {
cin >> temp;
PQ.push(temp);
}
for (int i = n - 1; i >= 1; i--) {
temp = PQ.top();
PQ.pop();
temp += PQ.top();
PQ.pop();
PQ.push(temp);
cost += temp;
}
cout << cost << endl;
}
return 0;
}
PQ의 top()이 최소여야 하므로 greater<int> 옵션을 넣어줘야 한다.
'기초 알고리즘 문제 풀이' 카테고리의 다른 글
29. UVa-12455 Bars //Making subset using Bitmask-method (0) | 2020.02.25 |
---|---|
28. UVa-725 Division //완전탐색, bitmask기법 (0) | 2020.02.24 |
26. Uva-1203 Argus //Priority Queue & 비교연산자의 특수화 (0) | 2020.02.23 |
25. UVa-11849 CD (0) | 2020.02.23 |
24. Uva-11136 Hoax or what //overflow (0) | 2020.02.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 신경망
- 순환 신경망
- 영상처리
- 연속 신호
- 신호 및 시스템
- 영상구조
- Andrew ng
- 컴퓨터과학
- Logistic Regression
- 인덱스 이미지
- ML
- 밑바닥부터 시작하는 딥러닝
- RGB이미지
- 자연어 처리
- gradient descent
- 사진구조
- 딥러닝
- 머신러닝
- 매트랩
- CNN
- CS
- 이미지
- Neural Network
- 컴퓨터 과학
- NLP
- 매트랩 함수
- rnn
- 이미지처리
- 머신 러닝
- 이산 신호
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함