python关于书架问题

共有 N 头奶牛(1 ≤ N ≤ 20,000),每头奶牛有自己的高度 Hi(1 ≤ Hi ≤ 10,000),N 头奶牛的总高度为 S。书架高度为B(1 ≤ B ≤ S < 2,000,000,007).
为了帮助John到达书架顶层,找出使用奶牛数目最少的解决方案。

输入格式
第 1 行:空格隔开的整数 N 和 B;

第 2 ~ N+1 行:第 i+1 行为整数 Hi

输出格式
能达到书架高度所使用奶牛的最少数目。

img

因为不会贪心,所以自己写了个代码,测试样例没问题,但其它测试有问题。自己改了很多次,还是没有找到主要问题,不知道怎么去修改。请高人指点,如能附上代码更好


t,b = map(int,input().split())
ls = []
cot = 0
s = 0
for i in range(t):
    n = int(input())
    ls.append(n)
    m = max(ls)
    cot+=m #相加最大值,并删除,继续循环
    ls.remove(m)
    if cot<=b:
        s +=1
if cot>=b:#直到达到高度,输出
    print(s)







        

大概写了一下,看看是不是这样


t, b = map(int, input("Input T   B\t").split())
ls = []
cot = 0
s = 0
# 输入奶牛信息
for i in range(t):
    n = int(input("Input Cow {}\t".format(i+1)))
    ls.append(n)

# 先把奶牛按高度排序
ls.sort(reverse=True)
#print(ls)

items = []
for i in range(t):
    items.append(ls[i])
    cot += ls[i]
    if cot >= b:
        break

#输出奶牛数和合计高度
print("nums",len(items), 'high', sum(items))
#输出选择的奶牛列表
print(",".join([str(n) for n in items]))


#获取奶牛数量,和书架高度
num, height = [int(i) for i in input("请输入数据:").split(" ")]
#奶牛高度列表
hlist = [ int(input("请输入数据:")) for i in range(num)]

#不小于书架高度,就是大于等于书架高度的最少数量
#奶牛高度从高到低排序,循环与书架高度相减
for n,h in enumerate(sorted(hlist,reverse=True),1):
    height -= h
    if height <= 0:
        print(f"{n}头牛高度可以达到书架")
        break
else:
    print("所有牛加起来都达不到")