騰訊馬拉松之數列求和(python 實現)

2021-06-09 05:54:03 字數 1482 閱讀 3322

n個數字和乙個範圍

[x,y]

,求從這

n個數字中任意取出一些數字,使得它們的和在範圍

[x,y]

中有多少種取法。

輸入:

輸入第一行為整數case,case<=10 表示有case組測試資料。

對於每一組測試資料,第一行為乙個整數n (n<=30),第二行為n個整數a[i],第三行為兩個整數x和y。其中,

a[i]>=0

,sum(a[i])<2^31,0

輸出:

對於每組資料輸出一行,總的取法數。

樣例輸入: 2

31 2 4

1 73

1 2 4

2 5樣例輸出: 7

4(hint:  比如有3個數字 有8種不同的取法)

f=open("c:/num.txt",'r')

record = f.readlines()

for i in record:

print i

group = int(record[0])

record = record[1:]

for ii in range(0,group):

num = int(record[0])

numlist = [int(i) for i in record[1].strip('\n').split(' ')]

x,y = [int(i) for i in record[2].strip('\n').split(' ')]

record = record[3:]

c = cal(num,numlist,x,y)

print c

def val(l,x,y):

sum = 0

for i in l:

sum += i

if sum >= x and sum <= y:

return 1

else:

return 0

def combin(items, n=none):

if n is none:

n = len(items)

for i in range(len(items)):

v = items[i:i+1]

if n == 1:

yield v

else:

rest = items[i+1:]

for c in combin(rest, n-1):

yield v + c

def cal(num,numlist,x,y):

count = 0

for i in range(len(numlist)):

for j in combin(numlist, i+1):

if val(j,x,y):

count +=1

return count

f.close()

2013騰訊程式設計馬拉松初賽(3月20日)

1 第一題 小q系列故事 屌絲的逆襲 表示這道題基本沒什麼演算法,學過計算機語言的應該都能搞定吧。2 第二題 小明系列故事 買年貨 這道題直接用01揹包問題就可以解決了,只是除了錢的限制,還有積分的限制和免費的情況,就是這點在除錯程式的時候出了點小問題,總是wa。狀態可以定義為dp x y z x表...

2013騰訊程式設計馬拉松初賽(3月24日)

1 題目一 小q系列故事 最佳裁判 這道題就是找最大值和最小值的題目,學過c的應該都沒問題的。2 題目二 小明系列問題 小明序列 這道題目是最長上公升子串行的一種變形吧,就是子串行中相鄰數的下標之差必須大於d 開始看錯題目,以為是相鄰數之差大於d,結果wa了好多次,最後看了別人的discuss才恍然...

2013騰訊程式設計馬拉松初賽 鄭廠長系列故事 體檢

鄭廠長系列故事 體檢 time limit 1.0 seconds memory limit 32768k 鄭廠長不是正廠長 也不是副廠長 他根本就不是廠長 只是公司的乙個碼農 這次總共有n位員工接受體檢,並且每個員工都需要做k 個專案的檢查才算完成整個體檢的流程。現在來了 m個醫生為員工做身體檢查...