Submission #1342019

#TimeUsernameProblemLanguageResultExecution timeMemory
1342019minhtienBank (IZhO14_bank)C++20
19 / 100
18 ms8632 KiB
#include <bits/stdc++.h>

using namespace std;
const int N=21;
const int maxn=1<<21;
int n,m;
int a[N],a1[N];
int dp[maxn],dp1[maxn];
int dem=0;
int main()
{
    cin >>n >>m;
    for(int i=0;i<n;i++){
        cin >> a[i];
    }
    for(int j=0;j<m;j++){
        cin >> a1[j];
    }
    for(int mask=0;mask<(1<<m);mask++){
        dp[mask]=-1;
        dp1[mask]=-1;
    }
    dp[0]=0;
    dp1[0]=0;
    for(int mask=0;mask<(1<<m);mask++){
        if(dp[mask]==-1) continue;
        for(int j=0;j<m;j++){
            if(!(mask>>j)&1){
                int mask1=mask^(1<<j);
                int s1=dp[mask];
                if(s1==n) continue;
                int s2=a[dp[mask]];
                int s3=dp1[mask]+a1[j];
                if(s3<s2){
                    dp1[mask1]=s3;
                    dp[mask1]=s1;
                }
                else if(s3==s2){
                    dp[mask1]=s1+1;
                    dp1[mask1]=0;
                }
                if(dp[mask1]==n){
                    dem=1;
                }
            }
        }
    }
    cout << (dem==1?"YES":"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...