一道Python题请看1下哪有问题

电影院售票处有很多人排着长队。他们每个人都有一个单一的100,50还是25美元的钞票。
一张电影票25 dollars。
Vasya想把票卖给这条线的每一个人。
如果 Vasya 最初没有钱并严格按照人们排队的顺序出售门票,他能否向每个人出售一张票并找零?
如果瓦夏能把一张票卖给每个人,返回YES,并用他当时手头的钞票找零。否则返回NO。

自己写的代码有些实例带进去对,这两个带进去不对,估计逻辑还是有一些问题请帮我在此基础上改一下

def tickets(people):
    c = []
    ch = 0
    for i in people:
        if i == 25:
            c.append(i)
            ch = sum(c)
        if i>25:
            ch -= (i-25)
            if ch >= 0:
                c.append(25)
    if ch >= 0:
        return "YES"
    else:
        return "NO"

print(tickets([25, 25, 50, 100]))#"YES"
print(tickets([25, 50, 25, 50, 100, 25, 25, 50]))#"NO"

思路有问题,不能直接用手里钱的总和来计算。
比如你手里只剩两张50,ch为100,再来个50,你总和上算能找开,但你根本没零钱。
改了一下代码

def tickets(people):
    dict = {25:0,50:0,100:0}
    for i in people:
        if i == 25:
            dict[25] += 1
        elif i == 50:
            if (dict[25] == 0):
                return "NO"
            else:
                dict[25]-=1
                dict[50]+=1
        else:
            # 一个很简单的逻辑,当你手里有50元时,只能用来给100找零,所以应该优先50+25
            if (dict[25]>0 and dict[50]>0):
                dict[25]-=1
                dict[50]-=1
                # 其实100可以不要,因为100无法被用于找零,这里主要是为了能够显示手里最终有什么样的组合才使用的
                dict[100]+=1
            elif (dict[25]>=3):
                dict[25]-=3
                dict[100]+=1
            else:
                return "NO"
    return "YES"
print(tickets([25, 25, 50, 100]))#"YES"
print(tickets([25, 50, 25, 50, 100, 25, 25, 50]))#"NO"
 

考虑下交换代码的顺序