有一个长度为 n 的数组n 是 10 的倍数每个数 ai 都是区间 0 9 中的 整数。小明发现数组里每种数出现的次数不太平均而更改第 i 个数的代价为 bi他想更改若干个数的值使得这 10 种数出现的次数相等都等于 n10 请问 代价和最少为多少。python代码
首先统计每种数出现的次数,然后计算出每种数需要更改的次数。 对于每个需要更改的位置,选择更改最小代价的数,直到每种数出现的次数都相等为止。 代码如下:
n = int(input()) a = list(map(int, input().split())) cnt = [0] * 10 for x in a: cnt[x] += 1 avg = n // 10 cost = 0 for i in range(10): if cnt[i] < avg: for j in range(avg - cnt[i]): min_cost = float('inf') min_idx = -1 for k in range(n): if a[k] == i: continue c = b[a[k]][i] if c < min_cost: min_cost = c min_idx = k a[min_idx] = i cnt[i] += 1 cost += min_cost print(cost)
原文地址: https://www.cveoy.top/t/topic/bLO5 著作权归作者所有。请勿转载和采集!