#include<iostream> #include<vector> #include<map> #include<list> #include<algorithm> //#include<bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n >> m; vector<int> arr(n); for (int i = 0; i < n; i++) { cin >> arr[i]; } vector<vector<int>> user(m, vector<int>(2, 0)); for (int i = 0; i < m; i++) { cin >> user[i][0] >> user[i][1]; } sort(arr.begin(), arr.end()); sort(user.begin(), user.end(), [](vector<int>& a, vector<int>& b) { if(a[0] == b[0]) return a[1] > b[1]; return a[0] < b[0]; }); int res = 0; vector<bool> isbuy(m, false); int idx = 0; for (int i = 0; i < n; i++) { idx = 0; int obj = arr[i]; int maxval = 0; int index = 0; while (idx < n && user[idx][0] <= obj) { //idx++; if (idx < n && isbuy[idx] == false && maxval < user[idx][1]) { maxval = user[idx][1]; index = idx; } idx++; } res += maxval; isbuy[index] = true; } cout << res << endl; return 0; }
思路是:双排序,然后尽量用最小的服务器获得最大的钱。
求问大佬这样的思路对不对
全部评论
(0) 回帖