Submission #1248193

#TimeUsernameProblemLanguageResultExecution timeMemory
1248193escobrand은행 (IZhO14_bank)C++20
100 / 100
95 ms58952 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],c[lg+1]; int dp[lg+1][1<<lg],mask,msk; int sum[1<<lg]; 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]; c[i] = c[i-1] + a[i]; } for(i = 0;i<m;i++) { cin>>b[i]; } a[0] = 1; dp[0][0] = 1; for(mask = 1;mask<(1<<m);mask++) { sum[mask] = sum[mask ^ (1<<__builtin_ctz(mask))] + b[__builtin_ctz(mask)]; i = lower_bound(c+1,c+1+n,sum[mask])-c; if(i>n)continue; for(j = 0;j<m;j++) { if(mask>>j&1) { 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(i == n && dp[i][mask] == a[n]) { cout<<"YES"; return 0; } } cout<<"NO"; 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...