1.注意operator<应该声明为const函数
// 例如输入是 14 2的时候表示的是总的内存是14 , 总共有2个进程
// 接下来有2行, 每行分别是进程进行计算需要的内存和存放计算结果需要的内存
// 需要判断的是,总的内存减去上一个进程存放结果的内存以后大于或等于下一个进程计算需要的内存
// 另外是进程需要先进行排序,计算需要内存最多的最先进行,如果计算需要的内存相同,则存放结果需要的内存小的进程先进行
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class node {
public:
int r, s;
node() {
}
node(int _r, int _s):r(_r), s(_s) {}
// 注意将操作符重载的函数声明为const,否则sort会出现runtime error
bool operator<(const node& other) const {
if (r > other.r) {
return true;
} else if (r == other.r) {
if (s < other.s) return true;
else return false;
} else {
return false;
}
}
};
int main() {
int noder, nodes;
int t, k, n;
bool flag = true;
cin >> t;
while (t--) {
flag = true;
cin >> k >> n;
vector<node> storage;
for (int i = 0; i < n; ++i) {
cin >> noder >> nodes;
storage.push_back(node(noder, nodes));
}
// 下面的代码段代替sort时出现超时现象
// node temp = node(0, 0);
// for (int i = 0; i < n; ++i) {
// for (int j = 0; j < n -1; ++j) {
// if (storage[j + 1] < storage[j]) {
// temp = storage[j];
// storage[j] = storage[j + 1];
// storage[j + 1] = temp;
// }
// }
// }
sort(storage.begin(), storage.end());
for (int i = 0; i < n; ++i) {
if (k >= storage[i].r) {
k -= storage[i].s;
} else {
flag = false;
break;
}
}
if (flag) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}