제출 #1308413

#제출 시각아이디문제언어결과실행 시간메모리
1308413xnoel은행 (IZhO14_bank)C++20
100 / 100
313 ms94900 KiB
#include <bits/stdc++.h> using namespace std; int main(){ //freopen("1.in","r",stdin); int n,m; cin>>n>>m; vector<int> salary(n),notes(m); map<int,vector<int>> mp; for (int i=0;i<n;i++) { cin>>salary[i]; mp[salary[i]]; } for (int i=0;i<m;i++) cin>>notes[i]; int total=(1<<m); vector<int> value(total,0); for (int mask=1;mask<total;mask++) { int first_bit=(1 << (31 - __builtin_clz(mask))); value[mask]=value[mask^first_bit]+notes[31-__builtin_clz(first_bit)]; if (mp.find(value[mask])!=mp.end()) { mp[value[mask]].push_back(mask); } } vector<vector<int>> dp(n+1,vector<int>(total,0)); dp[0][0]=1; for (int i=0;i<n;i++) { int num=salary[i]; for (int mask=0;mask<total;mask++) { if (dp[i][mask]==0) continue; for (int supp_mask: mp[num]) { if (mask&supp_mask) continue; dp[i+1][mask|supp_mask]=1; } } } int ans=count(dp[n].begin(),dp[n].end(),1); if (ans==0) cout<<"NO\n"; else cout<<"YES\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...