題目描述
牛牛準備參加學校組織的春遊, 出發前牛牛準備往揹包裡裝入一些零食, 牛牛的揹包容量為w。輸入描述:牛牛家裡一共有n袋零食, 第i袋零食體積為v[i]。
牛牛想知道在總體積不超過揹包容量的情況下,他一共有多少種零食放法(總體積為0也算一種放法)。
輸入包括兩行輸出描述:第一行為兩個正整數n和w(1 <= n <= 30, 1 <= w <= 2 * 10^9),表示零食的數量和揹包的容量。
第二行n個正整數v[i](0 <= v[i] <= 10^9),表示每袋零食的體積。
輸出乙個正整數, 表示牛牛一共有多少種零食放法。示例1
輸入:解題思路:3 10
1 2 4
輸出:8
說明:三種零食總體積小於10,於是每種零食有放入和不放入兩種情況,一共有222 = 8種情況。
題目看起來和dp演算法的揹包問題有點相似,該題基本思路也差不多。本人**:第n袋零食是否放入基於上一步每種放入方法的剩餘的容量
我自己寫了乙個遍歷的list的方法,但是記憶體會不足。實在想不到方法解決記憶體不足了,去看了別人的答案。
a = input().split(' ')
n = int(a[0])
w = int(a[1])
v = list(map(int,input().split(' ')))
li =
cur_w =w
cnt = 1
for i in range(1,n+1):
#li[i-1] li[i]
size = len(li)
for j in range(size):
if li[j]-v[i-1]>=0:
cnt +=1
print(cnt)
別人的**:
def f(w,v):
if len(v)>0 and v[-1]>=w:
return f(w,v[:-1])
elif sum(v)<=w:
return 2**len(v)
elif w<=0 or len(v)==0:
return 0
else:
return f(w,v[:-1])+f(w-v[-1],v[:-1])
line = input()
n = int(line.split(' ')[0])
w = int(line.split(' ')[1])
line = input()
v =
for i in range(n):
print(f(w, sorted(v)))
牛客 牛牛的揹包 貪心演算法
時間限制 c c 1秒,其他語言2秒 空間限制 c c 524288k,其他語言1048576k 64bit io format lld 題目描述 牛牛有最多50個物品,每個物品有乙個type標號,並且有乙個taste值,現在要求選擇若干個物品放進揹包使得x y最大,x為選擇的不同type的數量,y...
牛客網 牛牛的數列
題目描述 牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足 最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升的子串行,牛牛想知道這個連續子串行最長的長度是多少。一開始看到這個題,總是被繞進 改變乙個數 中,就想說是不是遍歷陣列,然後每個數都嘗試改變...
牛牛的數列 牛客網
牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足 最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升的子串行,牛牛想知道這個連續子串行最長的長度是多少。輸入包括兩行,第一行包括乙個整數n 1 n 10 5 即數列的長度 第二行n個整數a i,表示數列...