본문 바로가기

백준 문제풀이/Greedy

[C++] 백준 문제풀이 (Greedy) 15903번 카드 합체 놀이

 

 

https://www.acmicpc.net/problem/15903

 

15903번: 카드 합체 놀이

첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1,

www.acmicpc.net

 

 

 

#include <bits/stdc++.h>
//[C++] 백준 문제풀이 (Greedy)



int main(int argc, char *argv[])
{
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(nullptr);

	std::priority_queue<long long, std::vector<long long>, std::greater<>> pq;
	int n, m;

	std::cin >> n >> m;
	int a;

	for (int i = 0; i < n; ++i){
		std::cin >> a;
		pq.push(a);
	}

	for (int i = 0; i < m; ++i){
		long long num1 = pq.top(); pq.pop();
		long long num2 = pq.top(); pq.pop();
		pq.push(num1 + num2);
		pq.push(num1 + num2);
	}

	long long ret = 0;

	while(!pq.empty()){
		ret += pq.top(); pq.pop();
	}

	std::cout << ret << "\n";
	return 0;
}