80分 第一个点没过
#include <stdio.h>
int V, n, a[31], i, j, IMAX = 0;
_Bool d[2][20001], State = 0;
int main(){
scanf("%d%d", &V, &n);
for (; i < n; ++ i) scanf("%d", a + i + 1);
d[0][0] = 1;
for (i = 1; i <= n; ++ i) {
int t = IMAX;
for (j = 0; j <= t; ++ j){
int Sum = j + a[i];
(d[State][j] && Sum <= V) && (
d[State?0:1][j] = d[State?0:1][Sum] = 1,
(Sum > IMAX) && (IMAX = Sum)
);
}
State = State?0:1;
}
for (i = V; i >= 0; -- i)
if (d[0][i] | d[1][i]) {printf("%d", V - i), exit(0); }
return -1;
}