厦门理工学院OJ题解(1501:养生的学长)

本文介绍了一个关于时间管理和资源调度的问题,如何帮助恩杰学长在完成N个作业的同时,合理安排含奶糖节奏以应对每30分钟的OJ刷题需求。通过模拟算法,确定最少需要的牛奶糖数量,确保作业和刷题节奏最优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

恩杰学长最近在养生,需要含着牛奶糖才能写作业和刷OJ。已知:
(a) 每个牛奶糖可以含嘴里10分钟,并且只有在“每个作业刚开始的时候”学长才能够吃新的牛奶糖
(b) 学长马上要参加ACM算法比赛,所以每间隔30分钟他会花5分钟刷OJ(间隔时间从上次刷完OJ结束开始计算,即使在做作业过程中到了30分钟的间隔时间,他也会中断下来先刷OJ)
© 如果在某个作业开始前,发现嘴里还有糖,但是不足以维持完成接下来的作业时长,就需要吃新的糖。嘴里有多颗糖时,每颗糖的消耗速度是一样的
恩杰学长今晚有N个作业,完成这些作业所需时间为a1,a2…aN。学长刚刷了会OJ开始准备做作业,那么他最少需要吃多少颗牛奶糖才能完成所有作业?

Input

第一行输入一个正整数N( 0 < N <= 10)代表作业的数量
第二行输入N个正整数ai以空格相隔,代表接下来要顺序完成的每项作业所需的时间(0 < ai <= 10)
【输入的测试数据保证一定能够完成作业】

Output

输出一个整数K代表最少需要的牛奶糖数

Sample Input

5
1 2 3 4 5
Sample Output

2

这题就是个大模拟,就是边界可能会考虑不周,比如最后一个作业完成时刚好满足距离上次刷oj30分钟,此时是不用刷oj的,因为题目结束边界的是所有作业完成。

#include <iostream>

using namespace std;

int main(void)
{
	int n;
	cin >> n;

	int candy_cnt = 0;
	int tot_time = 0;
	int candy_last_time = 0;

	while (n--)
	{
		int a;
		cin >> a;

		tot_time += a;

		if (n && tot_time >= 30 || !n && tot_time > 30)
		{
			tot_time -= 30;
			a += 5;
		}

		if (candy_last_time < a)
		{
			candy_last_time = 10;
			++candy_cnt;
		}

		candy_last_time -= a;
	}

	cout << candy_cnt << endl;

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值