题面描述
小明就要开学了,但小明的行李太多了以致于他不能自己全部拿到学校去,于是小明想要将一些行李邮寄到学校去。现在已知小明共有 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]))