贪心策略
定义一个小根堆,每次都将最小的数,pop掉,最后求和即可
因为强制交换 k 次,所以,每次只需要选择原数的最小值进行交换即可,所以定义小根堆,特别省事
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int main()
{
int t; cin >> t;
while(t--)
{
//priority_queue<int> q;
priority_queue<int,vector<int>,greater<int>> q;
int n,k; cin >> n >> k;
for(int i = 0 ; i < n ; i++)
{
int x; cin >> x;
q.push(x);
}
for(int i = 0 ; i < k ; i++)
{
int x; cin >> x;
q.pop();
q.push(x);
}
long long sum = 0;
for(int i = 0 ; i < n ; i++)
{
sum += q.top();
q.pop();
}
cout << sum << endl;
}
return 0;
}