"""
给一个长度为N的整数数组,将这个数组分成M段,每一段的和为这一段的权重,所有段的权重的最大值为这次分割的权重,求所有分割中最小的权重
输入描述:
第一行是两个整数,表示N, M (M<=N)
第二行数N个空格分割的整数
输出:
输出所有分割中最小的权重
样例:
input:
5 3
1 4 2 3 5
output:
5
"""
import sys
def find_min(data):
min_data, min_idx = data[0], 0
for idx, data_temp in enumerate(data):
if data_temp<min_data:
min_data = data_temp
min_idx = idx
return min_data, min_idx
def merge_once(data, sum_data):
min_data, min_idx = find_min(sum_data)
data = data[:min_idx]+[min_data]+data[min_idx+2:]
sum_data[min_idx-1] = data[min_idx-1]+data[min_idx]
if not min_idx==len(sum_data)-1:
sum_data[min_idx+1] = data[min_idx]+data[min_idx+1]
sum_data = sum_data[:min_idx]+sum_data[min_idx+1:]
return data, sum_data
def get_weight(data, m):
if m<2:
return sum(data)
sum_data = [data[idx]+data[idx+1] for idx in range(len(data)-1)]
while len(data)>m:
data, sum_data = merge_once(data, sum_data)
return max(data)
if __name__=="__main__":
line1 = sys.stdin.readline().strip()
line2 = sys.stdin.readline().strip()
n,m = line1.split(" ")
n,m = int(n), int(m)
data = list(map(int, line2.split()))
print(get_weight(data, m))
笔试编程题汇总(6)
最新推荐文章于 2020-04-01 23:20:42 发布