简化版的01背包
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <string.h>
#include <math.h>
#include <stack>
#include <ctype.h>
#include <memory.h>
using namespace std;
int v,n;
int a[35];
int f[20005];
int main()
{
cin >> v;
cin >> n;
for( int i = 1; i <= n; i++ )
cin >> a[i];
memset(f, 0, sizeof(f));
for( int i = 1; i <= n; i++ )
{
for( int j = v; j >= a[i]; j-- )
f[j] = max( f[j], f[j-a[i]] + a[i] );
}
int rest = -1;
for( int i = 1; i <= v; i++ )
rest = max(rest, f[i]);
cout << v-rest << endl;
return 0;
}