在网站里面跑不出来 不过可以代入数据进行验算 都是对的
nc=list(map(int,input().split()))
N=nc[0]#N种金额
C=nc[1]#每种金额硬币的数量
# print(N)输出检测
# print(C)输出检测
Vlist=[] #记录小于c的硬币面额(0为无,1为有)
Blist=[] #记录小于c的硬币面额的数量
for i in range(100000000):#初始化列表
Vlist.append(0)
Blist.append(0)
Vlist1=[] #存储小于c硬币面额(排序后的)
Blist1=[] #存储小于c的硬币数量(排序后的)
number=0 #提供的星期数量
N1=0 #面额小于c的硬币种类数
V=[] #面额
V1=[] #小于c的面额
B=[] #硬币数
for i in range(N):
X=list(map(int, input().split())) #输入硬币面额和对应数量
V.append(X[0]) #存入硬币面额
B.append(X[1]) #记录对应面额的数量
# print(V)输出检测
# print(B)输出检测
for i in range(N):
if V[i]>=C: #面额大于C的直接加上去
number=number+B[i]
else :#列表值为0的代表无,1的代表有。下标i对应硬币的面额C
V1.append(V[i])
Vlist[V[i]]=1 #对于小于c的硬币面额,修改为1。下标V[i]对应硬币的面额C
Blist[V[i]]=B[i]#下标V[i]对应硬币的面额C
N1=N1+1
# print(Vlist[V[i]])输出检测
# print(Blist[V[i]])输出检测
for i in range(100000000): #对于小于c的硬币面额 进行存储 简化后续计算
if Vlist[i]==1: #列表值为0的代表无,1的代表有。下标i对应硬币的面额C
Vlist1.append(i)
Blist1.append(Blist[i])
# print(Vlist1)输出检测
# print(Blist1)输出检测
# print(number) 输出检测
# print(V1)输出检测
# print(B1)输出检测
# print(N1)输出检测
while True:
c=C #记录每使用一种硬币,剩下所需的支付金额
for i in range(len(Vlist1)-1,-1,-1): #从大的开始减
while(c>Vlist1[i] and Blist1[i]>0):
c=c-Vlist1[i]
Blist1[i]=Blist1[i]-1
for i in range(len(Vlist1)): #从小的开始减
while(c>0 and Blist1[i]>0):
c=c-Vlist1[i]
Blist1[i]=Blist1[i]-1
if c<=0: #金额支付足够则星期数加一
number=number+1
else : #不足以支付则跳出循环
break
print(number)
0.0分
0 人评分