开学:小明就要开学了,但小明的行李太多了以致于他不能自己全部拿到学校去,于是小明想要将一些行李邮寄到学校去。现在已知小明共有 N 件行李...

题面描述

小明就要开学了,但小明的行李太多了以致于他不能自己全部拿到学校去,于是小明想要将一些行李邮寄到学校去。现在已知小明共有 N 件行李,每件行李的重量为 Wi ,共有 M 家快递公司可用。小明至多选择一家公司寄快递,第 i 家快递公司最多能邮寄重量总和为 ai 的行李,收取的费用为 ci 。小明自己最多可以拿总重量为 D 的行李,并且希望自己的花费越小越好。请问小明能否将自己所有的行李拿到学校去?

输入数据

输入数据的第一行为一个正整数 T ,表示测试数据的组数。接下来是 T 组测试数据,每组测试数据的第一行为三个整数 N 、 M 和 D (1 ≤ T ≤ 100, 1 ≤ N, M, D ≤ 1000) 。接下来的一行为 N 个整数,表示 N 件行李的重量,接下来的 M 行中,每行有空格分隔的两个整数 ai 和 ci ,代表第 i 家快递公司最多邮寄的重量和费用 (0 ≤ wi ≤ 100, 0 ≤ ai ≤ 100000, 0 ≤ ci ≤ 1000) 。

输出数据

对于每一组输入数据,输出一行结果 ”Case #id: ans” ,表示第 id 组数据的结果是 ans , id 从 1 开始。如果小明不能将自己所有的行李拿到学校去, ans 为“ QAQ ”,否则 ans 为小明的最小花费。

样例输入

1
2 2 10
5 6
5 10
6 5

样例输出

Case #1: 5

心得:这题相对简单,可以思考下如果可以选择多家公司寄快递,最少花费多少。.||

T = int(input())      
for t in range(T):      
    N,M,D = list(map(int, input().split()))       
    ns = list(map(int, input().split()))      ds = 0        
    for i in ns:            
        ds += i        
    ms = []      
    for i in range(M):          
        ms.append(list(map(int, input().split())))      
    if ds<=D:            
        print('Case #{}: {}'.format(t+1,'0'))      
    else:          
        ds = ds-D               
        isOK = False          
        temp = []          
        for i in range(M):              
            if ms[i][0]>=ds:                  
                isOK = True                  
                temp.append(ms[i][1])          
        if isOK==False:              
            print('Case #{}: {}'.format(t+1,'QAQ'))          
        else:              
            temp.sort()              
            print('Case #{}: {}'.format(t+1,temp[0]))  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值