派送费计费

提交数: 232, 通过率: 54.31%, 平均分: 59.55

题目描述:

某物流公司根据物流优先级分成一级到四级,派件费分别为 300、 200、 100、 80 元/件。每天有 n 件物品分批进仓,每件包含单号、 派送批次、 派件费。为实现物流派件优先规则,送货员在仓库中选择派件优先级最高的一件派送,接下来选择剩余部分和新进批次中派件优先级最高的一件派送,每派送一件,新的一批到达仓库。 根据要求编写程序计算送货员某天前 m 件物品的派件费总额。

输入格式:

第一行两个整数,m和n。m表示要求前 m 件物品的派件费总额,n表示有 n 件物品分批进仓。

接下来n行,每行三个变量,分别为单号、 派送批次、 派件费。

输出格式:

请输出一行 m 个整数,其中第 i 个整数表示前 i 件物品的派件费总额。

数据范围:

1<=m<=n<=1000

样例输入:

4 9
A 1 200
B 1 100
C 2 80
D 2 80
E 3 300
F 4 80
G 4 80
H 4 300
I 5 200

样例输出:

200 300 600 900

提示:

def sort(lst):
    n = len(lst)
    i = 0
    while i < n-1:
        for j in range(n - 2 , i - 1 , -1):
            if lst[j][1] > __________:  #填空1,将lst中的元素按派件批次升序排序
                __________ #填空2
        i = j + 1 
        
    return lst


def imitate(lst,m):
    n = len(lst)
    for i in range(n):
        lst[i].append(-1)
    val = 0
    j = 0
    q = {300:[-1,-1], 200:[-1,-1], 100:[-1,-1], 80:[-1,-1]}
    for i in range(m):
        while j<n and __________: #填空3
            k = lst[j][2]              
            if q[k][0] == -1:
                q[k][0] = j
            else:
                p = q[k][1]           
                __________  #填空4       
            __________ #填空5             
            j += 1
        for v in [300,200,100,80]:     
            k = q[v][0]            
            if k != -1:
                __________ #填空               
                q[v][0] = lst[k][3]    
                break
    return val
'''
读取快递数据,存入列表 task 中。列表的每个元素包含 3 个数据项,分别快递单的单号、 派送批次、 派件费。读取派送件数, 存入 m
'''
m,n = map(int,input().split())
task = []
for i in range(n):
    x,y,z = input().split()
    task.append([x,int(y),int(z)])

task = sort(task)
for i in range(1,m+1):
    val = imitate(task, i)
    print(val, end = ' ')
时间限制: 1000ms
空间限制: 256MB

来源: 【2023年3月温州二模信息技术第15题】