本题是NP-hard问题,无法在线性时间得到最优解。由于数据范围较大,题解给出近似解法First-Fit Decreasing。
给定多个数据中心的服务器容量 data_centers[i]
,以及多个客户的服务器需求 customer_requests[j]
。一个客户必须完全放到同一个数据中心中,数据中心可以服务多个客户,只要总占用不超过其容量。目标是最大化能被完全服务的客户数量。
核心思路:
将客户按照需求从小到大排序,优先满足小需求;同时用一个“有序可更新的容器”保存当前各数据中心的“剩余容量”。对每个客户需求 r
,在容器中找到最小的且≥r 的剩余容量(best-fit)。若找到:
r
后若仍有剩余 rest = cap - r
,再把 rest
放回容器;业务背景:
假设你是一家云服务提供商的工程师,负责优化云资源的分配。公司有多个数据中心,每个数据中心有不同数量的服务器。现在有一些新的客户需要分配服务器资源。每个客户对服务器的需求量不同,而每个数据中心的服务器数量有限。你的任务是尽可能满足更多客户的需求,要求:同一个数据中心的服务器可以分配给多个客户使用,一个客户的需求只能分配到其中一个数据中心。
问题: 给定一个列表 data_centers,表示每个数据中心的服务器数量,和一个列表 customer _requests,表示每个客户的服务器需求量。你需要设计一个算法,将客户分配到不同的数据中心,使得满足客户需求的数量最大。
输入四行:
第一行是一个整数,表示数据中心大小
第二行为一个数组,表示每个数据中心的服务器数量,用空格分割
第三行是一个整数,表示客户总数
第四行为一个数组,表示每个客户的服务器需求量,用空格分割
输入范围:
1<=len(data_centers)<=1000
1<=len(customer_requests)<=1000
1<=data_centers[i]<=10000
1<=customer_requests[i]<=10000
一个整数,表示最多可以满足的客户数量。
如果所有客户都不满足需求,则返回客户数为 0 。
输入
3
1 2 3
3
100 2 300
输出
1
说明
在这个样例中,每个数据中心的服务器数量都非常少,分别为 1、2 和 3 台而每个客户的需求量,分别为 100、2 和 300 台服务器
只能能够满足一个客户的需求,输出为 1
输入
3
10 20 30
4
5 10 15 25
输出
4
说明
可以将需求为 5 的客户分配到第二个数据中心
将需求为 10 的客户分配到第一个数据中心
将需求为 15 的客户分配到第二个数据中心
将需求为 25 的客户分配到第三个数据中心