牛客網 牛牛的揹包

2021-09-27 02:15:13 字數 1529 閱讀 6495

題目描述

牛牛準備參加學校組織的春遊, 出發前牛牛準備往揹包裡裝入一些零食, 牛牛的揹包容量為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,表示數列...