1 条题解

  • 1
    @ 2024-6-12 18:21:51

    【题目大意】在 n 个时间段内完成 n 个小游戏,每个小游戏完成的时间和获得奖励不同,如何选择小游戏使得最后获得奖励最高。

    需要注意这句话的理解“对于第 i 个小游戏,参加者必须在第 Ti 个时间段结束前完成才能得到奖励”,也就是在第 1~Ti 个时间段范围之内,其中任意一个时间段都可以完成第 i 个游戏。

    【考纲知识点】贪心算法、数组、sort 函数。

    【解题思路】

    本题采用贪心策略,想要获得的最高奖励,优先完成获得奖励多的游戏,同时考虑在完成第 i 个游戏的时候,第 1~Ti 个时间段是否被占用,如果都被占用,那么该游戏就不能被完成。解题步骤如下:

    1. 首先创建结构体 game 用于保存每个游戏的信息,包括游戏时间期限 T 和对应的奖励 R,并创建 games[505]用于保存 n 个游戏的信息
    2. 按题目要求输入数据,并保存在 games 数组中
    3. 根据游戏的奖励,对数组 games 进行降序排序,
    4. 遍历排序后的数组 games,依次判断第 i 个游戏是否能完成,如果能完成就累加当前游戏的奖励 games[i].R
    5. 判断游戏是否能完成可以使用一个数组进行标记,标记第 1n 个时间段是否被占用,如果第 i 个游戏的可完成时间段为第 1Ti,如果该范围都被占用,则第 i 个游戏无法完成。

    【参考程序】 image

    • 1

    [GESP202309 五级] 巧夺大奖

    信息

    ID
    574
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    38
    已通过
    15
    上传者