題目
數碼城市有土地出售。待售的土地被劃分成若干塊,每一塊標有一個價格。這裏假設每塊土地只有兩塊相鄰的土地,除了開頭和結尾的兩塊是隻有一塊鄰居的。每位客戶可以購買多塊連續相鄰的土地。
現給定這一系列土地的標價,請你編寫程序,根據客戶手頭的現金量,告訴客戶有多少種不同的購買方案。
輸入格式:
輸入首先在第一行給出兩個正整數: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))