刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

拼题A打卡奖励

拼题 A 的教超搞打卡活动,指定了 N 张打卡卷,第 i 张打卡卷需要 mi 分钟做完,完成后可获得 ci 枚奖励的金币。活动规定每张打卡卷最多只能做一次。活动总时长为 M 分钟。请你算出最多可以赢得多少枚金币?

时间限制:7000

内存限制:524288

输入

输入首先在第一行中给出两个正整数 N(≤ 103) 和 M(≤ 365×24×60),分别对应打卡卷的数量和以“分钟”为单位的活动总时长(不超过一年)。随后一行给出 N 张打卡卷要花费的时间 mi(≤ 600),最后一行给出 N 张打卡卷对应的奖励金币数量 ci(≤ 30)。上述均为正整数,一行内的数字以空格分隔。

输出

在一行中输出最多可以赢得的金币数量。

样例输入

5 110
70 10 20 50 60
28 1 6 18 22

样例输出

40

提示

样例解释: 选择最后两张卷子,可以在 50+60=110 分钟内获得 18+22=40 枚金币。

使用微信搜索喵呜刷题,轻松应对考试!

答案:

拼题A打卡奖励问题解答如下:
这个问题可以使用贪心算法来解决。贪心算法的基本思想是,每一步都采取当前状态下的最优解,从而希望达到全局的最优解。在这个问题中,我们可以按照每张打卡卷完成所需的时间从小到大进行排序,然后依次选择打卡卷,直到总时间超过活动总时长为止。最后计算获得的金币数量即为答案。

具体实现步骤如下:

  1. 创建一个结构体数组,用于存储每张打卡卷的时间和奖励金币数量。
  2. 根据打卡卷所需时间从小到大排序。
  3. 初始化总金币数量为0。
  4. 遍历排序后的打卡卷数组,对于每张打卡卷,如果当前总时间加上该打卡卷所需时间小于等于活动总时长,则选择该打卡卷,并更新总时间和总金币数量。否则,终止循环。
  5. 返回总金币数量作为答案。

以下是C语言的代码实现:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int time;   // 打卡卷所需时间
    int coins;  // 打卡卷奖励金币数量
} Card;

int cmp(const void *a, const void *b) {
    Card *cardA = (Card *)a;
    Card *cardB = (Card *)b;
    return cardA->time - cardB->time;  // 按照时间从小到大排序
}

int main() {
    int N, M;   // N为打卡卷数量,M为活动总时长
    scanf("%d %d", &N, &M);
    Card cards[N];  // 存储每张打卡卷的时间和奖励金币数量
    for (int i = 0; i < N; i++) {
        scanf("%d %d", &cards[i].time, &cards[i].coins);  // 读取每张打卡卷的时间和奖励金币数量
    }
    qsort(cards, N, sizeof(Card), cmp);  // 按照时间从小到大排序
    int totalCoins = 0;  // 总金币数量
    int currentTime = 0;  // 当前总时间
    for (int i = 0; i < N; i++) {  // 遍历排序后的打卡卷数组
        if (currentTime + cards[i].time <= M) {  // 如果当前总时间加上该打卡卷所需时间小于等于活动总时长,则选择该打卡卷
            currentTime += cards[i].time;  // 更新当前总时间
            totalCoins += cards[i].coins;  // 更新总金币数量
        } else {  // 如果当前总时间已经超过活动总时长,则终止循环
            break;
        }
    }
    printf("%d\n", totalCoins);  // 输出最多可以赢得的金币数量
    return 0;
}

解析:

null
创作类型:
原创

本文链接:拼题A打卡奖励 拼题 A 的教超搞打卡活动,指定了 N 张打卡卷,第 i 张打卡卷需要 mi 分钟做

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share