贪心算法: 奶牛做题

5289. 奶牛做题 - AcWing题库

贝茜正在参加一场奶牛智力竞赛。

赛事方给每位选手发放 n 张试卷。

每张试卷包含 k 道题目,编号 1∼k。

已知,不同卷子上的相同编号题目的难度相同,解题时间也相同。

其中,解决第 i 道题(无论哪张试卷)所需的时间为 ti 分钟。

每解决 1 道题目,就可以获得 1 分。

因此,每张试卷的最终得分等于这张卷子上被解决的问题数量。

此外,每有一张满分试卷(即成功解决卷子上全部 k 个问题的试卷),还可以额外获得 1 分奖励。

比赛的持续时长为 M分钟,请你计算贝茜最多可能获得多少分。

输入格式

第一行包含三个整数 n,k,M。

第二行包含 k 整数 t1,t2,...,tk。

输出格式

一个整数,表示贝茜可能得到的最大分数。

数据范围

前 44 个测试点满足 1≤n,k≤5

所有测试点满足 1≤n,k≤45,0≤M≤2×109,1≤ti≤106。

输入样例1:
复制代码
3 4 11
1 2 3 4
输出样例1:
复制代码
6
输入样例2:
复制代码
5 5 10
1 2 4 8 16
输出样例2:
复制代码
7

贪心思路:

先枚举做多少套成套试卷。

然后按照时间从小到大做每一道题,直至剩余时间不足。

取答案最大值即

AC code:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n, k, m;
int arr[50];
int sum = 0;
int main() {
	cin >> n >> k >> m;
	for (int i = 1; i <= k; i++) {
		cin >> arr[i];
		sum = sum + arr[i];
	}
	sort(arr + 1, arr + k + 1);
	int ans = 0;
	for (int i = 0; i <= n; i++) {
		int time = sum * i;
		if (time > m) break;
		int x = m - time;
		int res = i * k + i;
		for (int j = 1; j <= k; j++) {
			if (x < arr[j]) break;
			int num = min(n - i, x / arr[j]);
			res += num;
			x -= num * arr[j];
		}
		ans = max(ans, res);
	}
	cout << ans;
}
相关推荐
blxr_4 分钟前
力扣hot100路径总和Ⅲhttps://leetcode.cn/problems/path-sum-iii/
算法·leetcode·职场和发展
noipp22 分钟前
【无标题】
c语言·数据结构·c++·算法
森G30 分钟前
64、完善聊天室程序(TLV拓展)---------网络编程
网络·c++·tcp/ip
渡众机器人36 分钟前
第八届全球校园人工智能算法精英大赛-算法应用赛-渡众机器人智能体对抗挑战赛规则
人工智能·算法·机器人·自动驾驶·自主导航·对抗赛
郝学胜-神的一滴1 小时前
完全二叉树与堆底层原理深度剖析 | 手写C++大顶堆实现
java·开发语言·数据结构·c++·python·算法
青山木1 小时前
Hot 100 --- 缺失的第一个正数
算法·leetcode·哈希算法
农民小飞侠1 小时前
[leetcode] 165. Compare Version Numbers
java·算法·leetcode
装不满的克莱因瓶1 小时前
掌握语义分割经典模型 FCN——从像素分类到端到端分割的奠基之作
人工智能·python·深度学习·算法·机器学习·分类·数据挖掘
学计算机的计算基1 小时前
链表算法上篇:LeetCode 206/234/141/142/160/21 题解与易错点
java·笔记·算法·链表
大白话_NOI2 小时前
【洛谷 P2678】 [NOIP2015 提高组] 跳石头 超详细题解
c++·算法