【題解】ZeroJudge c110: 00311 – Packets

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=c110
【解題想法】Greedy【筆記

  • 想要使用最少的箱子,因此從尺寸最大的箱子開始使用。
while True:
    lst1 = list(map(int, input().split()))
    lst2 = [0, 0]
    if sum(lst1) == 0:
        break
    ans = 0
    
    ans += lst1[5]
    
    ans += lst1[4]
    lst2[0] += lst1[4] * 11
    
    ans += lst1[3]
    lst2[1] += lst1[3] * 5
    
    if lst1[2] % 4 == 0:
        ans += lst1[2] // 4
    else:
        lst2[1] += 7 - (lst1[2] % 4) * 2
        lst2[0] += 8 - (lst1[2] % 4)
        ans += lst1[2] // 4 + 1
    
    if lst1[1] > lst2[1]:
        lst1[1] -= lst2[1]
        if lst1[1] % 9 == 0:
            ans += lst1[1] // 9
        else:
            lst2[0] += (9 - (lst1[1] % 9)) * 4
            ans += lst1[1] // 9 + 1
    elif lst1[1] < lst2[1]:
        lst2[0] += (lst2[1]-lst1[1]) * 4
    
    if lst1[0] > lst2[0]:
        lst1[0] -= lst2[0]
        if lst1[0] % 36 == 0:
            ans += lst1[0] // 36
        else:
            ans += lst1[0] // 36 + 1
    print(ans)
分享本文 Share with friends