PTA 7-5 買地攻略 (25 分)

題目

數碼城市有土地出售。待售的土地被劃分成若干塊,每一塊標有一個價格。這裏假設每塊土地只有兩塊相鄰的土地,除了開頭和結尾的兩塊是隻有一塊鄰居的。每位客戶可以購買多塊連續相鄰的土地。

現給定這一系列土地的標價,請你編寫程序,根據客戶手頭的現金量,告訴客戶有多少種不同的購買方案。

輸入格式:
輸入首先在第一行給出兩個正整數:N(≤10
4
)爲土地分割的塊數(於是這些塊從 1 到 N 順次編號);M(≤10
9
)爲客戶手中的現金量。

隨後一行給出 N 個正整數,其中第 i 個數字就是第 i 塊土地的標價。

題目保證所有土地的總價不超過 10
9

輸出格式:
在一行中輸出客戶有多少種不同的購買方案。請注意客戶只能購買連續相鄰的土地。

輸入樣例:
5 85
38 42 15 24 9
結尾無空行
輸出樣例:
11
結尾無空行
樣例解釋:
這 11 種不同的方案爲:

38
42
15
24
9
38 42
42 15
42 15 24
15 24
15 24 9
24 9

解題思路

N, maxZijin = map(int, input().split())
inputList = list(map(int, input().split()))
# N, maxZijin = map(int, "5 85".split())
# inputList = list(map(int, "38 42 15 24 9".split()))

ans = []
def dfs(idx:int, cur:int, patch:[int]):
    #遞歸結束
    if cur <= 0:
        # ans.append(patch[:])
        return
    elif idx == len(inputList):
        return
    if cur >= inputList[idx]:
        if len(patch) == 0 or idx==(patch[-1]+1):
            # print(idx, cur, patch,inputList[idx])
            # print(idx, cur, patch)
            # and (idx == (patch[-1] + 1))
            patch.append(idx)
            ans.append(patch[:])
            dfs(idx+1, cur - inputList[idx] ,patch)
            # return
            #消除影響【重要】
            patch.pop()
    dfs(idx + 1, cur, patch)

dfs(0,maxZijin,[])
print(len(ans))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章