Submission #1229100

#TimeUsernameProblemLanguageResultExecution timeMemory
1229100nhathanhBank (IZhO14_bank)C++20
100 / 100
93 ms8644 KiB
#include <bits/stdc++.h>
using namespace std;
#define el "\n"
#define fi first
#define se second
#define pii pair<int,int>
#define fre(NAME)        freopen(NAME".inp","r",stdin); freopen(NAME".out","w",stdout)
int n,m;
int a[21],b[21];
int dp[(1<<20)-1][2];
string trans(int x)
{
   if(x==0) return "0";
   string temp;
   while(x>0)
   {
      temp+=char('0'+x%2);
      x/=2;
   }
      reverse(temp.begin(),temp.end());
   return temp;
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int j=0;j<m;j++) cin>>b[j];
    memset(dp,-1,sizeof(dp));
    dp[0][0]=1;
    dp[0][1]=0;
    for(int i=1;i<(1<<m);i++)
    {
       for(int j=0;j<m;j++)
       {
          if(!((i>>j)&1)) continue;
          int prev = i^(1<<j);
          if(dp[prev][0]==-1) continue;
          int have=dp[prev][1]+b[j];
          int need=a[dp[prev][0]];
          //cout<<trans(prev)<<" "<<have<<" "<<need<<" "<<j<<el;
          if(have<need)
          {
            dp[i][0]=dp[prev][0];
            dp[i][1]=have;
          }
          else if(have==need)
          {
            dp[i][0]=dp[prev][0]+1;
            dp[i][1]=0;
          }
       }
       if(dp[i][0]==n+1)
       {
          cout<<"YES";
          return 0;
       }
    }
    cout<<"NO";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...