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

題目

數(shù)碼城市有土地出售。待售的土地被劃分成若干塊,每一塊標(biāo)有一個價格。這里假設(shè)每塊土地只有兩塊相鄰的土地,除了開頭和結(jié)尾的兩塊是只有一塊鄰居的。每位客戶可以購買多塊連續(xù)相鄰的土地。

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

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

隨后一行給出 N 個正整數(shù),其中第 i 個數(shù)字就是第 i 塊土地的標(biāo)價。

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

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

輸入樣例:
5 85
38 42 15 24 9
結(jié)尾無空行
輸出樣例:
11
結(jié)尾無空行
樣例解釋:
這 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]):
    #遞歸結(jié)束
    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))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容