mr_dot_convict

Not-so-hard?-mr.convict

Apr 13th, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 101;
  5. int dp[N][N * N];
  6. int ass[N];
  7. int n, k, ar[N];
  8.  
  9. signed main() {
  10.   memset(dp, 0, sizeof(dp));
  11.   memset(ass, 0, sizeof(ass));
  12.   cin >> k;
  13.  
  14.   int sm = 0;
  15.   n = 0;
  16.   for (int i = 1; i <= k; ++i)
  17.     cin >> ar[i], sm += ar[i], n = max(ar[i], n);
  18.  
  19.   dp[0][0] = 1;
  20.  
  21.   for (int i = 1; i <= k; ++i) {
  22.     for (int j = 0; j <= n * k; ++j) {
  23.       dp[i][j] = dp[i - 1][j];
  24.       if (j - ar[i] >= 0) dp[i][j] |= dp[i - 1][j - ar[i]];
  25.     }
  26.   }
  27.  
  28.   if (sm % 2 == 0 && dp[k][sm / 2]) {
  29.     cout << "YES\n";
  30.     int idx = k, curwt = sm / 2;
  31.     while (idx > 0) {
  32.       if (curwt - ar[idx] >= 0 && dp[idx - 1][curwt - ar[idx]]) {
  33.         ass[idx] = 1;
  34.         curwt -= ar[idx];
  35.       }
  36.       else ass[idx] = -1;
  37.       --idx;
  38.     }
  39.     for (int i = 1; i <= k; ++i) {
  40.       cout << ass[i] * ar[i] << " \n"[i == k];
  41.     }
  42.   }
  43.   else cout << "NO\n";
  44.  
  45.   return EXIT_SUCCESS;
  46. }
Add Comment
Please, Sign In to add comment