题目描述
小明参加了一个巧夺大奖的游戏节目。主持人宣布了游戏规则:
1、游戏分为 n 个时间段,参加者每个时间段可以选择一个小游戏。
2、游戏中共有 n 个小游戏可供选择。
3、每个小游戏有规定的时限和奖励。对于第 i 个小游戏,参加者必须在第 个时间段结束前完成才能得到奖励 。
小明发现,这些小游戏都很简单,不管选择哪个小游戏,他都能在一个时间段内完成。
关键问题在于,如何安排每个时间段分别选择哪个小游戏,才能使得总奖励最高?
解法分析
很明显的贪心思路,把价值从大到小枚举,再枚举可以玩的最晚的时间段
时间复杂度
核心代码
sort(games, games + n, cmp);
int sum = 0;
for (int i = 0; i < n; i++) {
for (int t = games[i].T; t >= 1; t--)
if (!st[t]) {
st[t] = true;
sum += games[i].R;
break;
}
}