#include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef ONLINE_JUDGE //POJ # include # include # include # define mkt make_tuple # define empb emplace_back #endif #ifdef _LOCAL # include "for_local.h" #else # define debug if (false) #endif using namespace std; typedef unsigned int uint; typedef long long ll; typedef unsigned long long ull; #define repi(_I, _B, _E) for(int _I = (_B); (_I) < (_E); ++ (_I)) #define rep(_I, _N) for(int _I = 0; (_I) < (_N); ++ (_I)) #define mkp make_pair #define all(_X) (_X).begin(), (_X).end() vector as; int c; int n; static int const C_MAX = 100003, N_MAX = 100; array dp; int const INF = 1<<29; signed main() { fill(all(dp), INF); dp[0] = 0; cin >> c >> n; rep(i, n) { int a; cin >> a; as.push_back(a); } rep(ci, c) { rep(ni, n) { int const c2 = ci + as[ni]; if ( c2 > C_MAX ) continue; dp[c2] = min(dp[c2], dp[ci] + 1); } } if ( dp[c] == INF ) dp[c] = -1; cout << dp[c] << endl; return 0; }