牛牛的揹包問題

2021-09-27 07:43:14 字數 1076 閱讀 7073

牛牛準備參加學校組織的春遊, 出發前牛牛準備往揹包裡裝入一些零食, 牛牛的揹包容量為w。

牛牛家裡一共有n袋零食, 第i袋零食體積為v[i]。

牛牛想知道在總體積不超過揹包容量的情況下,他一共有多少種零食放法(總體積為0也算一種放法)。

牛牛準備參加學校組織的春遊, 出發前牛牛準備往揹包裡裝入一些零食, 牛牛的揹包容量為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,於是每種零食有放入和不放入兩種情況,一共有2*2*2 = 8種情況。
#includeusing namespace std;

long long v[40];

int n;

long long ans = 0, w;

void dp(int t, long long sum)

for (int i = t + 1; i < n; i++) }}

int main()

if (sum <= w)

else

cout << ans << endl;

return 0;

}

如果小於等於w,就2的次方(這個移位操作太cool了)。

不然話,就遍歷。從第乙個往後加,然後第二個往後加。。。,直到找不到合適情況了。

一開始我自己寫還先排序了,後來發現根本不用,反正先放輕的重的都一樣。

【**從牛客網copy,

牛牛的揹包問題

牛牛準備參加學校組織的春遊,出發前牛牛準備往揹包裡裝入一些零食,牛牛的揹包容量為w。牛牛家裡一共有n袋零食,第i袋零食體積為v i 牛牛想知道在總體積不超過揹包容量的情況下,他一共有多少種零食放法 總體積為0也算一種放法 輸入描述 輸入包括兩行 第一行為兩個正整數n和w 1 n 30,1 w 2 1...

牛牛的揹包問題

牛牛準備參加學校組織的春遊,出發前牛牛準備往揹包裡裝入一些零食,牛牛的揹包容量為w。牛牛家裡一共有n袋零食,第i袋零食體積為v i 牛牛想知道在總體積不超過揹包容量的情況下,他一共有多少種零食放法 總體積為0也算一種放法 輸入包括兩行 第一行為兩個正整數n和w,表示零食的數量和揹包的容量。第二行n個...

牛客網 牛牛的揹包

題目描述 牛牛準備參加學校組織的春遊,出發前牛牛準備往揹包裡裝入一些零食,牛牛的揹包容量為w。牛牛家裡一共有n袋零食,第i袋零食體積為v i 牛牛想知道在總體積不超過揹包容量的情況下,他一共有多少種零食放法 總體積為0也算一種放法 輸入描述 輸入包括兩行 第一行為兩個正整數n和w 1 n 30,1 ...