解题思路
2025-10-26 09:27:49
发布于:浙江
4阅读
0回复
0点赞
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct Game {
int deadline; // 截止时间
int reward; // 奖励
};
// 按奖励从高到低排序
bool compare(Game a, Game b) {
return a.reward > b.reward;
}
int main() {
int n;
cin >> n;
vector<Game> games(n);
// 输入截止时间
for (int i = 0; i < n; i++) {
cin >> games[i].deadline;
}
// 输入奖励
for (int i = 0; i < n; i++) {
cin >> games[i].reward;
}
// 按奖励降序排序
sort(games.begin(), games.end(), compare);
// 记录每个时间段是否被占用
vector<bool> timeSlot(n + 1, false);
int totalReward = 0;
// 贪心选择
for (int i = 0; i < n; i++) {
// 从截止时间开始往前找空闲时间段
for (int t = games[i].deadline; t >= 1; t--) {
if (!timeSlot[t]) {
// 找到空闲时间段,安排这个游戏
timeSlot[t] = true;
totalReward += games[i].reward;
break;
}
}
}
cout << totalReward << endl;
return 0;
}
这里空空如也







有帮助,赞一个