Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- ifstream f ("forcoding.in");
- ofstream g ("forcoding.out");
- int n;
- long long maxim;
- struct element {
- int st, dr, val, poz;
- } v[10001], sol[10001];
- void read ()
- {
- int i, x;
- f >> n;
- for (i=1; i<=n; i++)
- {
- f >> x;
- v[i].val = x;
- v[i].poz = i;
- }
- for (i=1; i<=n; i++)
- {
- f >> x;
- v[i].st = x;
- }
- for (i=1; i<=n; i++)
- {
- f >> x;
- v[i].dr = x;
- }
- }
- bool ok (int pozitie)
- {
- int i, j;
- if (sol[1].poz == sol[2].poz)
- return false;
- for (i=1; i<pozitie; i++)
- for (j=i+1; j<=pozitie; j++)
- {
- if (sol[i].poz == sol[j].poz)
- return false;
- if (sol[i].poz + sol[i].dr >= sol[j].poz - sol[j].st)
- return false;
- }
- return true;
- }
- void afisare (int nr)
- {
- int i;
- long long suma = 0;
- for (i=1; i<=nr; i++)
- suma += sol[i].val;
- if (suma > maxim)
- maxim = suma;
- }
- void bkt (int k, int nr)
- {
- for (int i=1; i<=n; i++)
- {
- sol[k].val = v[i].val;
- sol[k].st = v[i].st;
- sol[k].dr = v[i].dr;
- sol[k].poz = v[i].poz;
- if (ok(k))
- {
- if (k == nr)
- afisare(nr);
- else
- bkt(k+1, nr);
- }
- }
- }
- int main()
- {
- read();
- for (int j=1; j<=n; j++)
- bkt(1, j);
- g << maxim;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement