#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; template bool prevSubset(bitset& bs, const bitset& mask) { if(bs.none()) return false; bs = bs.to_ulong() - 1ull; bs &= mask; return true; } const int INF = INT_MAX; int main() { int t, n; cin >> t >> n; vector v(n); for(int i=0; i> v[i]; vector isCompleted(1< bs(i); int sum = 0; for(int j=0; j dp(1<0; --i){ bitset<17> mask(i); bitset<17> bs = mask; do{ if(isCompleted[bs.to_ulong()]){ int j = (mask ^ bs).to_ulong(); dp[j] = min(dp[j], dp[i] + 1); } }while(prevSubset(bs, mask)); } cout << dp[0] << endl; return 0; }