Submission #1248196

#TimeUsernameProblemLanguageResultExecution timeMemory
1248196escobrandBank (IZhO14_bank)C++20
100 / 100
360 ms45232 KiB
#include <bits/stdc++.h> using namespace std; #define all(v) v.begin(),v.end() #define eb emplace_back #define ll long long #define fi first #define se second int t,n,i,m,j; const int lg = 20; int a[lg+1],b[lg]; int dp[lg+1][1<<lg],mask,msk; int f[lg+1],sum,tmp; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m; for(i = 1;i<=n;i++) { cin>>a[i]; sum += a[i]; } for(i = 0;i<m;i++) { cin>>b[i]; sum -= b[i]; } if(sum > 0) { cout<<"NO"; return 0; } sort(a+1,a+n+1,greater<>()); sort(b,b+m); a[0] = 1; dp[0][0] = 1; for(i = 1;i<=n;i++) { f[i] = INT_MAX; for(mask = 1;mask<(1<<m);mask++) { tmp = mask; for(j = __builtin_ctz(tmp);tmp;tmp ^= (1<<j),j = __builtin_ctz(tmp)) { msk = mask ^ (1<<j); if(dp[i-1][msk] == a[i-1]) { dp[i][mask] = b[j]; break; } if(dp[i][msk] && dp[i][msk] + b[j] <= a[i]) { dp[i][mask] = dp[i][msk] + b[j]; break; } } if(dp[i][mask] == a[i])f[i] = min(mask,f[i]); } } cout<<(f[n] == INT_MAX?"NO":"YES"); 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...