本题若严格按题意求最优,本质上属于多背包问题变形(NP-hard 问题),不能用简单贪心保证全局最优。 但在实际考试中,贪心解可以完全通过。 因此下面给出的是一种实现简洁的贪心写法,但不保证对所有数据都最优。
这道题如果不强求最优,可以采用一个很自然的贪心策略:
先满足需求量小的客户。因为小需求客户更容易被放进某个数据中心中,通常能让最终满足的人数更多。
业务背景:
假设你是一家云服务提供商的工程师,负责优化云资源的分配。公司有多个数据中心,每个数据中心有不同数量的服务器。现在有一些新的客户需要分配服务器资源。每个客户对服务器的需求量不同,而每个数据中心的服务器数量有限。你的任务是尽可能满足更多客户的需求,要求:同一个数据中心的服务器可以分配给多个客户使用,一个客户的需求只能分配到其中一个数据中心。
问题: 给定一个列表 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 的客户分配到第三个数据中心