제출 #1159039

#제출 시각아이디문제언어결과실행 시간메모리
1159039ryaminty은행 (IZhO14_bank)C++17
100 / 100
103 ms8652 KiB
#include <bits/stdc++.h> using namespace std; using pii=pair<int, int>; constexpr int mxN=20; int n, m; int a[mxN], b[mxN]; pii dp[1<<mxN]; int calc_res[1<<mxN]; int calc(int mask){ if (calc_res[mask]) return calc_res[mask]; int ret=0; for (int i=0;i<m;++i) ret+=b[i]*((mask>>i)&1); return calc_res[mask]=ret; } void printt(vector<int>&v){ for (int i:v) cout << i << " "; cout << "\n"; } int main(){ cin.tie(nullptr)->sync_with_stdio(false); cin >> n >> m; for (int i=0;i<n;++i) cin >> a[i]; for (int i=0;i<m;++i) cin >> b[i]; bool ok=false; for (int mask=0;mask<(1<<m);++mask){ if (dp[mask].first==n) ok=true; for (int i=0;i<m;++i){ if (mask&(1<<i)) continue; pii p = dp[mask]; if (dp[mask].second+b[i]==a[dp[mask].first]){ ++p.first; p.second=0; } else{ p.second+=b[i]; } dp[mask+(1<<i)]=max(dp[mask+(1<<i)], p); } } if (ok) cout<<"YES"; else cout<<"NO"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...