"""
給一個長度爲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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.