Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream f("date.in");
- ofstream g("date.out");
- int nr, nrsol, smax;
- struct library
- {
- int N, signup_t, books_per_day, book[10005];//process_time;
- }v[10005];
- struct solutie
- {
- int c[10005],nrel,ind;
- }solc[10005], sol[10005];
- /*struct libsol
- {
- int poz[10005],nrd,nrb;
- }lib[10005];*/
- int B, n, d, l, price[10005];
- bool b[10005];
- bool verif(int i1,int j1)
- {
- for(int i=i1;i<=j1;i++)if(b[i])return 0;
- return 1;
- }
- void gen_perm(int n, int P[])
- {
- next_permutation(P + 1, P + 1 + n);
- }
- void read()
- {
- f >> B >> n >> d;
- for (int i = 0; i < B; i++)
- f >> price[i];
- for (int i = 1; i <= n; i++)
- {
- f >> v[i].N;
- f >> v[i].signup_t;
- f >> v[i].books_per_day;
- for (int j = 1; j<= v[i].N; j++)
- f >> v[i].book[j];
- //v[i].process_time=v[i].N/v[i].books_per_day+v[i].signup_t;
- }
- }
- void afis()
- {
- short ap[10005]={0};
- int s=0;
- for(int i=1;i<=nr;++i)
- for(int j=1;j<=solc[i].nrel;++j)
- ap[solc[i].c[j]]++;
- for(int i=0;i<=1000;++i)
- if(ap[i]) s+=i;
- if(s>smax)
- {
- smax=s;
- nrsol=nr;
- for(int i=1;i<=nr;++i)
- sol[i]=solc[i];
- }
- }
- void bk(int pas)
- {
- if (pas <= d)
- {
- for (int q = 1; q <= n; ++q)
- {
- int pozi[10005];
- for (int i = 1; i <= v[q].N; ++i)
- pozi[i] = v[q].book[i];
- gen_perm(v[q].N, pozi);
- for (int k = 0; k < v[q].N; ++k)
- {
- for (int i = 1; i <= d - v[i].signup_t + 1; ++i)
- {
- if (verif(i, i + v[i].signup_t - 1))
- {
- for (int j = 1; j <= v[i].signup_t; ++j)
- b[j] |= 1;
- nr++;
- solc[nr].ind=q;
- for (int j = 1; j <= v[q].N - k; ++j)
- solc[nr].c[j] = v[q].book[j];
- solc[nr].nrel=q;
- bk(pas+v[q].signup_t);
- nr--;
- for (int j = 1; j <= v[i].signup_t; ++j)
- b[j] ^= 1;
- }
- }
- }
- }
- }
- else afis();
- }
- int main()
- {
- read();
- bk(1);
- g<<nrsol<<'\n';
- for(int i=1;i<=nrsol;++i)
- {
- g<<sol[i].ind<<" "<<sol[i].nrel<<'\n';
- for(int j=1;j<=sol[i].nrel;++j) g<<sol[i].c[j]<<" ";
- g<<'\n';
- }
- return 0;
- }
- /*void bk2(int pas,int ind)
- {
- library x=v[ind];
- if(pas<x.N)
- {
- for(int i=1;i<=x.N;++i)
- {
- bool ok=0;
- ap[x.book[i]]++;
- if(lib[ind].nrb<=x.books_per_day)
- lib[ind].poz[lib[ind].nrd][++lib[ind].nrb]=x.book[i],ok=1;
- else lib[ind].poz[++nrd][nrb]=x.book[i];
- bk2(pas+1,ind);
- ap[x.book[i]]--;
- if(ok) lib[ind].nrb--;
- else lib[ind].nrd--;
- }
- }
- }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement