https://www.acmicpc.net/problem/15903
[난이도] Silver1
[유형] 우선순위큐
[풀이]
우선순위 큐에 모든 원소들을 넣고 가장 작은 두 수를 뽑아서 계산해서 다시 넣어주고 반복하면 됩니다.
#include <cstdio>
#include <queue>
using namespace std;
int n,m;
using ll = long long;
int main(){
scanf("%d%d",&n,&m);
priority_queue<long long> pq;
while(n--) {
int v;
scanf("%d",&v);
pq.push(-v);
}
while(m--){
ll a = pq.top(); pq.pop();
ll b = pq.top(); pq.pop();
pq.push(a+b);
pq.push(a+b);
}
ll ans=0;
while(!pq.empty()) ans+=pq.top(), pq.pop();
printf("%lld",-ans);
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver1/15903.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Silver2] 1138 : 한 줄로 서기 (C++) (0) | 2022.11.06 |
---|---|
[BOJ/백준][Silver2] 5397 : 키로거 (C++) (0) | 2022.11.06 |
[BOJ/백준][Silver1] 2343 : 기타 레슨 (C++) (0) | 2022.09.26 |
[BOJ/백준][Gold5] 2866 : 문자열 잘라내기 (C++) (0) | 2022.09.26 |
[BOJ/백준][Silver1] 1850 : 최대공약수 (C++) (0) | 2022.09.26 |