解题思路
相当于价值是体积的 01 背包
剩余空间最小 -> 总数 - 占用最大空间
代码
#include <iostream>
using namespace std;
const int N = 20010;
int f[N];
int main() {
int n, m;
cin >> m >> n;
for (int i = 1; i <= n; i++) {
int v;
cin >> v;
for (int j = m; j >= v; j--) {
f[j] = max(f[j], f[j - v] + v);
}
}
cout << m - f[m] << endl;
return 0;
}