Advertisement
OIQ

xsxsxsxs

OIQ
Dec 8th, 2019
168
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8.  
  9. vector <int> a;
  10. vector <int> b;
  11. vector <int> c;
  12. string s;
  13.  
  14. int getvec(int ind) {
  15.  
  16.     int i = ind;
  17.     string num;
  18.  
  19.     for (;; i++) {
  20.         if (s[i] == ']') {
  21.             a.push_back(stoi(num));
  22.             break;
  23.         }
  24.         else if (s[i] == ',') {
  25.             a.push_back(stoi(num));
  26.             num = "";
  27.         }
  28.         else if (s[i] >= '0' && s[i] <= '9')
  29.             num.push_back(s[i]);
  30.     }
  31.  
  32.     return i + 2;
  33.    
  34. }
  35.  
  36. int getvec1(int ind) {
  37.  
  38.     int i = ind;
  39.     string num;
  40.  
  41.     for (;; i++) {
  42.         if (s[i] == ']') {
  43.             b.push_back(stoi(num) * -1);
  44.             break;
  45.         }
  46.         else if (s[i] == ',') {
  47.             b.push_back(stoi(num) * -1);
  48.             num = "";
  49.         }
  50.         else if (s[i] >= '0' && s[i] <= '9')
  51.             num.push_back(s[i]);
  52.     }
  53.  
  54.     return i + 2;
  55.  
  56. }
  57.  
  58. int getvec2(int ind) {
  59.  
  60.     int i = ind;
  61.     string num;
  62.  
  63.     for (;; i++) {
  64.         if (s[i] == ']') {
  65.             c.push_back(stoi(num));
  66.             break;
  67.         }
  68.         else if (s[i] == ',') {
  69.             c.push_back(stoi(num));
  70.             num = "";
  71.         }
  72.         else if (s[i] >= '0' && s[i] <= '9')
  73.             num.push_back(s[i]);
  74.     }
  75.  
  76.     return i + 2;
  77.  
  78. }
  79.  
  80. int main() {
  81.  
  82.     //string s;
  83.  
  84.     getline(cin, s);
  85.  
  86.     int i1, i2, i3;
  87.  
  88.     i1 = getvec(1);
  89.     i2 = getvec1(i1);
  90.     i3 = getvec2(i2);
  91.  
  92.  
  93.     for (int i = 0; i < b.size(); i++)
  94.         a.push_back(b[i]);
  95.  
  96.     vector <bool> curr(4001, false);
  97.     vector <bool> tmp;
  98.  
  99.  
  100.     curr[2000] = true;
  101.     tmp = curr;
  102.  
  103.     for (int i = 0; i < a.size(); i++) {
  104.         for (int j = 0; j < 4001; j++)
  105.             if (tmp[j] == true)
  106.                 curr[j + a[i]] = true;
  107.         tmp = curr;
  108.     }
  109.  
  110.     int ans = 0;
  111.     int cc = 0;
  112.     for (int i = 1; i <= (int)pow(2, c.size()) - 1; i++) {
  113.         int sum = 0, cm = i, j = 0;
  114.         int count = 0;
  115.  
  116.         while (cm > 0) {
  117.             if (cm % 2 == 1) {
  118.                 sum += c[j];
  119.                 count++;
  120.             }
  121.             cm /= 2;
  122.             j++;
  123.         }
  124.  
  125.         if (curr[sum + 2000]) {
  126.             //cout << sum  << " "<< i<< endl;
  127.             if (cc < count) {
  128.                 cc = count;
  129.                 ans = sum;
  130.             }
  131.             else if (cc == count)
  132.                 ans = min(ans, sum);
  133.         }
  134.     }
  135.  
  136.     cout << ans;
  137.  
  138.     return 0;
  139. }
Advertisement
RAW Paste Data Copied
Advertisement