零件分組【貪心演算法習題python】
阿新 • • 發佈:2018-12-18
題目描述
某工廠生產一批棍狀零件,每個零件都有一定的長度(Li)和重量(Wi)。現在為了加工需要,要將它們分成若干組,使每一組的零件都能排成一個長度和重量都不下降(若i<j,則Li<=Lj,Wi<=Wj)的序列。請問至少要分成幾組?
輸入輸出格式
輸入格式:
第一行為一個整數N(N<=1000),表示零件的個數。第二行有N對正整數,每對正整數表示這些零件的長度和重量,長度和重量均不超過10000。
輸出格式:
僅一行,即最少分成的組數。
輸入輸出樣例
輸入樣例#1:
5 8 4 3 8 2 3 9 7 3 5
輸出樣例#1:
2
分析:
1.優先按照長度排列,長度相等按照重量排列。
2.一次遍歷零件,滿足條件的零件加入同一組。
def min_group(num_obj, obj_feature_pair): pair_list = [] # 組成對 processed_list = [] # 被分組過的零件 group = 0 # 組數 for i in range(0, len(obj_feature_pair), 2): pair_list.append([obj_feature_pair[i], obj_feature_pair[i+1]]) pair_list.sort(key=lambda i:(i[0],i[1])) # 按照長度-》重量排列零件 while len(processed_list) != num_obj: min_f1 = -float('inf') min_f2 = -float('inf') start_flag = False # 出現滿足條件的零件標識 for index, pair in enumerate(pair_list): if pair[0] >= min_f1 and pair[1] >= min_f2 and index not in processed_list: start_flag = True min_f1 = pair[0] min_f2 = pair[1] processed_list.append(index) if start_flag: group += 1 return group print(min_group(5, [8, 4, 3, 8, 2, 3, 9, 7, 3, 5]))