avatar
Untitled

Oaspete 66 1st May, 2019

                                           
                         #include <iostream>

using namespace std;

int v[7], c[101], nr, v1[7], f[7], nr1, s, n, ok, v2[7], sol[101];

void backtr2(int n1) {
  int i, sum;
  if (nr1 == n1) {
    sum = 0;
    for (i = 0; i < nr1; i++) {
      if (v2[i] <= c[v1[i]])
        sum += v2[i] * v1[i];
      else
        break;
    }
    if (i == nr1 && sum == s)
      ok = 1;
    return;
  }
  for (i = 1; i <= 10; i++) {
    v2[nr1++] = i;
    backtr2(n1);
    if (ok == 1)
      return;
    nr1--;
    v2[nr1] = 0;
  }
}

void backtr1(int n1) {
  int i;
  if (nr == n1) {
    ok = 0;
    backtr2(n1);
    if (ok == 1) {
      for (i = 0; i < n1; i++)
        sol[v1[i]] = v2[i];
    }
    return;
  }
  for (i = 0; i < n; i++) {
    if (f[i] == 0) {
      v1[nr++] = v[i];
      f[i] = 1;
      backtr1(n1);
      if (ok == 1)
        return;
      f[i] = 0;
      nr--;
      v1[nr] = 0;
    }
  }
}

int main() {
  int i;
  cin >> n >> s;
  for (i = 0; i < n; i++)
    cin >> v[i];
  for (i = 0; i < n; i++)
    cin >> c[v[i]];
  for (i = 1; i <= n; i++) {
    nr = 0;
    backtr1(i);
    if (ok == 1)
      break;
  }
  for (i = 0; i < n; i++)
    cout << sol[v[i]] << " ";
  return 0;
}
                      
                                       
Pentru a distribui această postare, copiați această adresă URL și trimiteți-o prietenilor
RAW Paste Data