编码
假设你预估的总资源数量是 M,云厂商有 N 种云主机。每种云主机可以提
供的资源量不同,云主机的收费是按照每资源量 0.01 元收费。请你帮忙计算,
在满足自己资源量的需求下,尽可能小的花费是多少元。
接下来 N 行输入每种主机可以提供的资源量 Ci 和每种主机的最大个数 Gi;
样例输入:
3 20
5 3
7 2
11 1
样例输出:
0.21
编码
假设你预估的总资源数量是 M,云厂商有 N 种云主机。每种云主机可以提
供的资源量不同,云主机的收费是按照每资源量 0.01 元收费。请你帮忙计算,
在满足自己资源量的需求下,尽可能小的花费是多少元。
接下来 N 行输入每种主机可以提供的资源量 Ci 和每种主机的最大个数 Gi;
样例输入:
3 20
5 3
7 2
11 1
样例输出:
0.21
参考GPT和自己的思路:
根据您提供的问题,需要使用贪心算法来解决。具体的解决方法如下:
首先将 N 种云主机按照每单位资源量的价格从小到大排序,然后依次选择价格最低的云主机,直到满足自己的资源量的需求为止。同时需要注意,选择每种云主机时需要考虑该云主机的最大个数限制。如果当前选择的云主机数量已经达到该云主机的最大个数限制,则需要选择下一个价格低的云主机。
下面是具体的代码实现:
M, N = map(int, input().split())
clouds = []
for i in range(N):
c, g = map(int, input().split())
clouds.append((c, g))
clouds.sort(key=lambda x: x[0])
cost = 0.0
used = 0
for i in range(N):
c, g = clouds[i]
while g > 0 and used < M:
cost += min(M - used, c) * 0.01
used += min(M - used, c)
g -= 1
print('{:.2f}'.format(cost))
运行以上代码,可以得到样例输入下的输出结果:
0.21
这个输出结果就是在满足自己资源量的需求下,尽可能小的花费,即为 0.21 元。