// #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432
// 本题其实我觉得C++题解中的第一个会更好,但是他的dp数组改为bool型会更好理解
#include <bitset>
#include <iostream>
#include <vector>
using namespace std;
int main() {
bitset<20005> dp;//----------可简单理解成更省空间的布尔型数组
int v, n;
cin >> v >> n;
vector<int> nn(n);
for (int i = 0; i < n; i++){
cin >> nn[i];
}
dp[0] = 1;
for (int i = 0; i < n; i++){
for (int j = v; j >= nn[i]; j--){//---------因为后面的数据更新依赖上一轮的前面的数据所以,从后往前递归
dp[j] = dp[j] || dp[j - nn[i]];//---------若dp[j]为 <true> 则表示,只考虑前i个物体,可以组合出空间j
}
}
for (int i = v; i >= 0; i--)
if (dp[i]){
cout << v - i;
return 0;
}
return 0;
}
// 64 位输出请用 printf("%lld")