Submission #337783

#TimeUsernameProblemLanguageResultExecution timeMemory
337783boykutBank (IZhO14_bank)C++14
25 / 100
6 ms748 KiB
#include <bits/stdc++.h>

using namespace std;

int dp[1 << 20][20];

signed main() {
   ios::sync_with_stdio(0);
   cin.tie(0);
   
   int n, m;
   cin >> n >> m;
   int a[n], b[m];
   int sum = 0;
   for (int i = 0; i < n; i++) cin >> a[i];
   for (int i = 0; i < m; i++) cin >> b[i], sum += b[i];
   vector <int> can[sum+1];
   for (int i = 0; i < (1 << m); i++) {
      int index = m - 1, num = i, s = 0;
      while (num) {
         if (num & 1) s += b[index];
         index--;
         num >>= 1;
      }
      can[s].push_back(i);
   }
   
   for (int i = 0; i < can[a[0]].size(); i++) {
      dp[can[a[0]][i]][0] = 1;
   }
   
   bool ok = false;
   for (int i = 1; i < n; i++) {
      int find = 0;
      for (int mask = 0; mask < (1 << m); mask++) {
         if (!dp[mask][i - 1]) continue;
         for (int el : can[a[i]]) {
            if ((mask & el) == 0)
               dp[mask | el][i] = 1, find = 1;
         }
      }
      if (find == 0) break;
   }
   for (int mask = 0; mask < (1 << m); mask++) {
      if (dp[mask][n - 1]) ok = true;
   }
   ok ? cout << "YES\n" : cout << "NO\n";
   return 0;
}

Compilation message (stderr)

bank.cpp: In function 'int main()':
bank.cpp:28:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |    for (int i = 0; i < can[a[0]].size(); i++) {
      |                    ~~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...