筆試編程題彙總(7)

"""
有N個商品,已知他們的價格,試判斷他們中的組合是否可以正好組合出價值爲M的禮包

輸入描述:
    第一行:N
    第二行:N個空格分割的整數,表示價格
    第三行:M
輸出描述:
    如果可以組合,輸出1, 否則輸出0

樣例:
    input:
        6
        99 199 1999 10000 39 1499
        10238
    output:
        1
"""


import sys


def check_with_mask(price_N, price, mask):
    if price == 0:
        return True, mask, price
    for idx, data in enumerate(price_N):
        if not mask[idx]:
            continue
        if data<=price:
            rtn, mask_rtn, price_rtn = check_with_mask(price_N, price-data, mask[:idx]+[False]+mask[idx+1:])
            if rtn:
                price = price_rtn
                mask = mask_rtn
                return True, mask, price
            else:
                continue
    return False, mask, price


def check_price(price_N, price):
    mask = [True]*len(price_N)
    rtn, mask, price = check_with_mask(price_N, price, mask)
    return (1 if rtn else 0)



if __name__=="__main__":
    line1 = sys.stdin.readline().strip()
    line2 = sys.stdin.readline().strip()
    line3 = sys.stdin.readline().strip()

    N = list(map(int, line1.split()))[0]
    price_N = list(map(int, line2.split()))
    price = list(map(int, line3.split()))[0]
    
    print(check_price(price_N, price))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章