题目描述
输入
输出
输出小伟能赢取最多的钱。
样例输入1
10000
7
4 2 4 3 1 4 6
70 60 50 40 30 20 10
样例输出1
9950
做法1
#include <bits/stdc++.h> using namespace std; struct Game { int t, w; Game(int t, int w) : t(t), w(w) {} bool operator<(const Game &other) const { return w > other.w; } }; int main() { /* 时段[0, 500] 共计501个元素 */ vector<int> tt(501, -1); int m, n; cin >> m >> n; vector<int> t(n), w(n); for (int i = 0; i < n; ++i) cin >> t[i]; for (int i = 0; i < n; ++i) cin >> w[i]; vector<Game> games; for (int i = 0; i < n; ++i) games.emplace_back(Game(t[i], w[i])); /* 按照所扣钱数由大到小排序 */ sort(games.begin(), games.end()); for (int i = 0; i < n; ++i) { /* 第i个小游戏必须在ti时间段之前完成 */ int pos = games[i].t - 1; /* 计算最晚的可以安排第i个小游戏的时间 */ while (pos >= 0 && tt[pos] != -1) --pos; if (pos == -1) m -= games[i].w; else tt[pos] = i; } cout << m << endl; return 0; }