#include <iostream> using namespace std; int N, M, cnt = 0, mincount = 1e9, flag; void dg(int cnt, int value, int v[], int k) { if (value == M) { if (cnt < mincount)mincount = cnt; flag = 1; return; } for (int i =k; i < N; i++) { if (value + v[i] <= M) { dg(cnt + 1, value + v[i], v, i+1); } } } int main() { cin >> M >> N; int v[N + 10]; //第i张邮票的面额 for (int i = 0; i < N; i++) { cin >> v[i]; } dg(0, 0, v, 0); //递归搜索,若不符合条件的数值,则不选,否则选入 if (flag == 1) { cout << mincount << endl; } else { cout << 0 << endl; } } // 64 位输出请用 printf("%lld")