【发布时间】:2023-02-04 02:12:57
【问题描述】:
在一场剧院演出中,有 N 个座位 [1,2,3,...N],每个座位的价格都不同,因此第 i 个票的价格为 A[i]。人们成群结队地来,想坐在一起。数组 B 的索引指示相应的组大小。通过最佳座位计划,确定所有者可以获得的最大利润。
例如:
N=6;
A = [9, 2, 5, 1, 2, 3]
B = [2, 3]
Ans: 数组 A 可以被划分为 9 + 2 + 5 = 16 和 2+3=5。因此售出机票的成本可以是16+5=21
【问题讨论】:
-
你试过什么?你在哪里遇到问题?
-
N、价格和团体人数的限制是什么?
-
@AbhinavMathur 我正在考虑应用滑动窗口方法,但我不知道如何在多个窗口滑动的同时保持每个窗口的最大值。
-
一种方法是尝试数组 B 的所有排列。在示例中,只有两个排列:[2,3] 和 [3,2]。然后尝试将第一组放在每个有效位置。有效位置是为其他组留出足够空间的位置。滑动窗口可用于快速计算每个头寸的利润。可以使用记忆,因为会有共同的子问题需要解决。
-
@Fire'NLightnin' 如果我明白你在说什么,那我不同意。反例是
A=[9,9,0,9,9,0,1,1,1,1,1],组大小为B=[5,2,2]。如果你把 5 组放在第一位,并最大化它的利润,你最终会得到[9,9,0,9,9], [1,1], [1,1],利润为 40。但最佳答案是[9,9], [9,9], [1,1,1,1,1],利润为 41。简而言之,我不认为有任何最优的贪心算法。
标签: algorithm data-structures sliding-window