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