Submission #1106154

#TimeUsernameProblemLanguageResultExecution timeMemory
1106154akzytrBank (IZhO14_bank)C++17
19 / 100
94 ms8636 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define arr array #define vec vector #define sz(a) ((int)(a).size()) void B() { /* people_covered[s]: = I| First I-1 have been covered, the target is first I leftover[s]: How much we have left when we have covered first I */ int N, M; cin >> N >> M; int a[N]; int b[M]; for(int i = 0; i < N; i++) { cin >> a[i]; } for(int i = 0; i < M; i++) { cin >> b[i]; } int dp[(1 << M)]; fill(dp, dp + (1 << M), -1); int leftover[(1 << M)]; leftover[0] = 0; dp[0] = 0; bool flag = 0; for(int i = 1; i < (1 << M); i++) { for(int lj = 0; lj < M; lj++) { if((i >> lj) & 1) { int prev = i ^ (1 << lj); if(dp[prev] == -1) { continue; } int nc = b[lj]; dp[i] = dp[prev]; if(leftover[prev] + nc == a[dp[prev]]) { leftover[i] = 0; dp[i]++; } else { leftover[i] = leftover[prev] + nc; dp[i] = dp[prev]; } flag = flag || (dp[i] == N); } } } cout << (flag ? "YES" : "NO") << endl; } int main() { B(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...