Submission #362753

#TimeUsernameProblemLanguageResultExecution timeMemory
362753ritul_kr_singhBank (IZhO14_bank)C++14
100 / 100
952 ms90732 KiB
#include <bits/stdc++.h> using namespace std; signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; int a[n], b[m], pre[n+1]; for(int& i : a) cin >> i; for(int& i : b) cin >> i; pre[0] = 0; for(int i=1; i<=n; ++i) pre[i] = pre[i-1]+a[i-1]; int lim = (1<<m); int dp[n+1][lim]; for(int i=0; i<lim; ++i){ dp[0][i] = 1; for(int j=1; j<=n; ++j){ dp[j][i] = 0; } } int ok = 0; int sum[lim]; sum[0] = 0; for(int j=1; j<lim; ++j){ for(int k=0; k<=m; ++k){ if(j&(1<<k)){ sum[j] = b[k]+sum[j-(1<<k)]; continue; } } } for(int i=1; i<=n; ++i){ for(int j=0; j<lim; ++j){ if(sum[j]==pre[i]){ for(int k=0; k<m; ++k){ if(j&(1<<k)){ if(dp[i-1][j-(1<<k)]){ } dp[i][j] |= dp[i-1][j-(1<<k)]; } } } if(dp[i][j]){ for(int k=0; k<m; ++k){ if(!(j&(1<<k))){ dp[i][j+(1<<k)] = 1; } } } if(i==n) ok |= dp[i][j]; } } cout << (ok ? "YES\n" : "NO\n"); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...