就是暴力搜索,用f[i]为0为1代表是否能够构成着一种,如果能就是1不然就是0,然后代码就出来了:
#include <stdio.h>
#include <stdlib.h>
char f[35001];
int main(int argc, char **argv)
{
int i, j, max = 0;
int m, n, a;
scanf("%d%d", &m, &n);
f[0] = 1;
for(i = 1; i <= n; i++){
scanf("%d", &a);
for(j = max; j >= 0; j--){
if(!f[j]){
continue;
}
if(j + a <= m){
if(j + a > max){
max = j + a;
}
f[j + a] = 1;
}
}
}
printf("%d\n", max);
return 0;
}