AcWing 165. 小猫爬山
原题链接
简单
作者:
coordinate
,
2020-01-02 11:31:38
,
所有人可见
,
阅读 777
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 20;
int n, w;
int cat[N], sum[N], res=N;
void dfs(int u, int k) {
if (k >= res) return;
if (u == n) {
res = k;
return ;
}
for (int i = 0; i < k; i++) {
if (cat[u] + sum[i] <= w) {
sum[i] += cat[u];
dfs(u + 1, k);
sum[i] -= cat[u];
}
}
sum[k] = cat[u];
dfs(u + 1, k + 1);
sum[k] = 0;
}
int main() {
cin >> n >> w;
for (int i = 0; i < n; i++) cin >> cat[i];
sort(cat, cat + n, [](int& a, int& b){
return b < a;
});
dfs(0, 0);
cout << res << endl;
}