Submission #1086906

#TimeUsernameProblemLanguageResultExecution timeMemory
1086906lhlephuocdaoBank (IZhO14_bank)C++17
100 / 100
82 ms16988 KiB
#include <bits/stdc++.h> using namespace std; const int MAX = 21; int N, M; int a[MAX], b[MAX], l[1<<MAX], f[1<<MAX]; void solve(){ cin >> N >> M; for(int i=1; i<=N; i++){ cin >> a[i]; } for(int i=0; i<M; i++){ cin >> b[i]; } memset(f, -1, sizeof(f)); memset(l, 0, sizeof(l)); f[0] = 0; // f[s] : number of people that can be covered by subset s // f[0] : can cover 0 people by empty subset // l[s] : sum of banknotes which is not used yet in subset s for(int mask=0; mask < (1<<M); mask++) if(f[mask] != -1){ for(int i=0; i < M; i++) if(!(mask & (1<<i))){ // i is not included in subset mask int x = b[i] + l[mask]; if(x < a[f[mask] + 1]){ f[mask | (1<<i)] = f[mask]; l[mask | (1<<i)] = x; } else if(x == a[f[mask] + 1]){ f[mask | (1<<i)] = f[mask] + 1; l[mask | (1<<i)] = 0; } if(f[mask | (1<<i)] == N){ cout << "YES\n"; return; } } } cout << "NO\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...