#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; class range {private: struct I{int x;int operator*(){return x;}bool operator!=(I& lhs){return x ostream& operator<<(ostream& os, const pair& p){ return os << "{" << p.first << ", " << p.second << "}"; } template ostream& operator<<(ostream& os, const vector& obj) { os << "{"; for (const auto& e : obj) os << e << ", "; return os << "}"; } template ostream& operator<<(ostream& os, const set& obj) { os << "set{"; for (const auto& e : obj) os << e << ", "; return os << "}"; } template ostream& operator<<(ostream& os, const map& obj) { os << "map{"; for (const auto& e : obj) os << e << ", "; return os << "}"; } #ifdef ONLINE_JUDGE #define dump(expr) ; #else #define dump(expr) { cerr << "\033[33m#L" << __LINE__ << ": " << expr << "\033[39m" << endl; } #endif ll solve() { int c, n; cin >> c >> n; vector vs(n); for (int i : range(n)) cin >> vs[i]; vector opts(c + 1, 1 << 30); opts[0] = 0; for (int x : vs) { for (int i : range(c + 1 - x)) opts[i + x] = min(opts[i + x], opts[i] + 1); dump(opts); } if (opts[c] == 1 << 30) return -1; return opts[c]; } int main() { cout << fixed << setprecision(12); cout << solve() << endl; }