计算赚取的最高积分

问题描述 投票:0回答:1

我在采访中遇到这个问题,我尝试阅读了很多次,但我无法清楚地理解它。

为了促进身体健康,他们在门户网站上推出了“GetFit” 由 n 个冲刺组成的锦标赛。每个冲刺持续给定的时间 天数,包括多项任务,例如俯卧撑、跑步、 等等。一些任务是为冲刺的每一天安排的。第i个 sprint 持续 days[i] 天,每个 sprint 在 其他。也就是说,如果第 i 个冲刺在 d 天结束,则第 (i + 1) 个冲刺 从第 (d + 1) 天开始。在每个冲刺期间,完成所需的 安排在冲刺第 j 天的任务为参与者赢得了 j 积分。

比赛是周期性的,即,一旦最后一个冲刺 锦标赛结束,下一场锦标赛的第一个冲刺开始。每个 然而,锦标赛有相同的冲刺时间表。更正式地说, 比赛日程本质上可以被认为是循环的,之后 最后的冲刺,第一个冲刺再次开始。

一名员工决定参加。但由于日程紧张, 员工无法完成每天的所有任务。相反, 员工将连续完成 k 天的任务,希望 以获得最大点数。

给定 n 个冲刺的冲刺天数,以及需要进行的天数 员工竞争k,找到员工能获得的最高分 分数。培训可以在任何冲刺的任何一天开始和结束。

注意:⚫ k 保证小于总天数 冲刺持续到最后。 • 另外,没有必要开始和结束 在同一场比赛中进行训练。 • 此处的冲刺表示一组 在特定时间段内进行的活动 示例 有 n = 3个sprint,每个sprint的天数为days = [2,3,2],并且 k=4.

最多可获得的点数 = 2+1+2+3 = 8. 1 选择是从第一个冲刺的最后一天开始,并在第一个冲刺的最后一天结束 第二次冲刺的最后一天。

另一个例子:days = [7,4,6,3,5] 且 k = 8,结果 = 33

说明从第 5 天开始最多可获得 33 点积分 冲刺 4 的时间并在冲刺 5 的最后一天结束。 获得的积分为 (5) + (1 + 2 + 3+ 4+ 5+ 6+7)=33。请注意如何尽快 一组冲刺结束,比赛再次开始 7天。

我不清楚这个程序的积分(结果)是如何计算的以及

k
的作用是什么。

algorithm
1个回答
0
投票

最令人困惑的部分是第二个示例,因为解释是错误的。要解决此问题,您需要从数组中丢弃 4、6 或 3,以使第 4 个冲刺成为最后一个冲刺,或者您说第 5 个冲刺的第 5 天到第 6 个(第一个)冲刺的最后一天。

k 是获得最高分数所需的连续天数。每天给出的分数与其在冲刺中的位置一样多(第一天 1 分,第二天 2 分,...)。在最后一次冲刺之后,它再次开始第一个冲刺。

我首先将数组求和并计算整个数组的分数(n 天的冲刺给出 n * (n + 1) / 2 分)。然后将基点计算为 k / sum * Score(整数除法)和 k = k % sum。现在 k 小于 sum,您可以使用滑动窗口来遍历所有可能性,尽管也许有更智能的方法。

© www.soinside.com 2019 - 2024. All rights reserved.