Submission #1001461

#TimeUsernameProblemLanguageResultExecution timeMemory
1001461IcelastBank (IZhO14_bank)C++17
0 / 100
59 ms262144 KiB
#include <iostream> #include <bits/stdc++.h> #define ll long long using namespace std; const ll maxn = 2*1e5+5, INF = 4e18+9; void solve(){ int n, m; cin >> n >> m; vector<ll> a(n+2), b(m+1); for(int i = 1; i <= n; i++){ cin >> a[i]; } a[n+1] = INF; for(int i = 1; i <= m; i++){ cin >> b[i]; } int full = (1<<m)-1; vector<vector<ll>> dp(m+1, vector<ll>(full+1, 0)), left(m+1, vector<ll>(full+1, 0)); left[0][0] = 0; for(int i = 0; i < m; i++){ for(int mask = 0; mask <= full; mask++){ if(mask&(1<<i)) continue; if(dp[i][mask]+1 <= n+1 && left[i][mask] + b[i+1] == a[dp[i][mask]+1]){ if(dp[i+1][mask|(1<<i)] < dp[i][mask]+1){ dp[i+1][mask|(1<<i)] = dp[i][mask]+1; left[i+1][mask|(1<<i)] = 0; } }else if(dp[i][mask]+1 <= n+1 && left[i][mask] + b[i+1] < a[dp[i][mask]+1]){ left[i+1][mask|(1<<i)] = left[i][mask] + b[i+1]; } dp[i+1][mask] = dp[i][mask]; left[i+1][mask] = left[i][mask]; } } ll mx = -1; for(int mask = 0; mask <= full; mask++){ mx = max(mx, dp[m][mask]); } if(mx == n){ cout << "YES"; }else{ cout << "NO"; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...