赛氪OJ-专注于算法竞赛的在线评测系统 (saikr.com) 思想
以为是个很难的题,没想到一次过。
首先用个优先队列小跟堆,然后给v数组排个降序。添加k个v[i]进队列里,这时候队列里存的就是答案。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int t[N];
int v[N];
priority_queue<int, vector<int>, greater<int>> q;
int main() {
int n, k;
cin >> n >> k;
for (int i = 0; i < n; i++)
cin >> t[i];
for (int i = 0; i < n; i++)
cin >> v[i];
sort(v, v + n, greater<int>());
int i=0;
while(q.size()<k)
{
q.push(v[i]);
i++;
}
int sum=0;
while(q.size())
{
int t=q.top();
sum+=t;
q.pop();
}
cout<<sum;
return 0;
}