#include #include #include using namespace std; const int N = 17, M = 1 << N, INF = 0x3f3f3f3f; int n, lim, t[N], dp[M]; void Solve() { scanf("%d%d", &lim, &n); for (int i = 0; i < n; ++i) scanf("%d", &t[i]); int full = 1 << n; memset(dp, 0x3f, sizeof(dp)); dp[0] = 0; for (int mask = 0; mask < full; ++mask) { int used = dp[mask]; int rem = lim - used % lim; for (int i = 0; i < n; ++i) { if (!(mask >> i & 1)) { int add = t[i] <= rem ? t[i] : rem + t[i]; int nmask = mask | (1 << i); if (dp[nmask] > used + add) { dp[nmask] = used + add; } } } } printf("%d\n", (dp[full - 1] + lim - 1) / lim); } int main() { Solve(); return 0; }