제출 #1280641

#제출 시각아이디문제언어결과실행 시간메모리
1280641efeg은행 (IZhO14_bank)C++20
100 / 100
324 ms20648 KiB
#include <bits/stdc++.h> using namespace std; #define F first #define S second #define ll long long #define pb push_back #define pqueue priority_queue typedef vector<int> vi; typedef pair<int,int> ii; typedef tuple<int,int,int> iii; typedef vector<ii> vii; const int maxN = 1e6; bool dp[30][1 << 22]; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n,m; cin >> n >> m; vi salary(n); vi banknote(m); for (int i = 0; i < n; i++) cin >> salary[i]; for (int i = 0; i < m; i++) cin >> banknote[i]; vector<vi> maskforsalary(1100); for (int mask = 0; mask < (1 << m); mask++){ int r = 0; for (int j = 0; j < m; j++){ if (mask & (1 << j)) r += banknote[j]; } if (r > 1000) continue; maskforsalary[r].pb(mask); } dp[0][0] = true; for (int i = 0; i < n; i++){ for (int mask = 0; mask < (1 << m); mask++){ if (!dp[i][mask]) continue; for (auto x : maskforsalary[salary[i]]){ if ((mask & x) == 0){ dp[i+1][mask | x] = true; } } } } for (int mask = 0; mask < (1 << m); mask++){ if (dp[n][mask]){ cout << "YES" << endl; return 0; } } cout << "NO" << endl; 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...