nickxj


私信TA

用户名:dotcpp0615219

访问量:1100

签 名:

等  级
排  名 6433
经  验 1419
参赛次数 0
文章发表 23
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

在网站里面跑不出来 不过可以代入数据进行验算 都是对的


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 人评分

  评论区

  • «
  • »