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個醫生為員工做身體檢查...