제출 #1325981

#제출 시각아이디문제언어결과실행 시간메모리
1325981DangerNoodle7591은행 (IZhO14_bank)C++20
0 / 100
143 ms327680 KiB
#include <bits/stdc++.h> using namespace std; #define lalala ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); #define endl "\n" #define N 22 #define int long long int #define big 10000000 #define pb push_back #define ins insert #define f first #define s second int n,m; int sal[N],bank[N]; vector<vector<int>> knap[N]; int dp[N][(1<<22)]; int coz(int i,int durum){ if(i>=n)return 1; if(dp[i][durum]!=-1)return dp[i][durum]; dp[i][durum]=0; for(auto u:knap[i]){ int ok=1; int yeni=durum; for(auto x:u){ if((yeni&(1<<x))==0){ ok=0;break; } yeni^=(1<<x); } if(ok){ dp[i][durum]=max(dp[i][durum],coz(i+1,yeni)); } } return dp[i][durum]; } signed main(){ lalala; memset(dp,-1,sizeof(dp)); cin>>n>>m; for(int i=0;i<n;i++)cin>>sal[i]; for(int i=0;i<m;i++)cin>>bank[i]; for(int i=1;i<(1<<(m));i++){ int top=0; vector<int> v; for(int j=0;j<m;j++){ if(i&(1<<j)){ top+=bank[j]; v.pb(j); } } for(int j=0;j<n;j++){ if(top==sal[j]){ knap[j].pb(v); } } } for(int i=0;i<n;i++){ if(knap[i].size()==0){ cout<<"NO"<<endl; return 0; } } if(coz(0,(1<<m)-1))cout<<"YES"<<endl; else cout<<"NO"<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...