Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. ifstream f("date.in");
  4. ofstream g("date.out");
  5. int nr, nrsol, smax;
  6. struct library
  7. {
  8. int N, signup_t, books_per_day, book[10005];//process_time;
  9. }v[10005];
  10. struct solutie
  11. {
  12. int c[10005],nrel,ind;
  13. }solc[10005], sol[10005];
  14. /*struct libsol
  15. {
  16. int poz[10005],nrd,nrb;
  17. }lib[10005];*/
  18. int B, n, d, l, price[10005];
  19. bool b[10005];
  20. bool verif(int i1,int j1)
  21. {
  22. for(int i=i1;i<=j1;i++)if(b[i])return 0;
  23. return 1;
  24. }
  25. void gen_perm(int n, int P[])
  26. {
  27. next_permutation(P + 1, P + 1 + n);
  28. }
  29. void read()
  30. {
  31. f >> B >> n >> d;
  32. for (int i = 0; i < B; i++)
  33. f >> price[i];
  34. for (int i = 1; i <= n; i++)
  35. {
  36. f >> v[i].N;
  37. f >> v[i].signup_t;
  38. f >> v[i].books_per_day;
  39. for (int j = 1; j<= v[i].N; j++)
  40. f >> v[i].book[j];
  41. //v[i].process_time=v[i].N/v[i].books_per_day+v[i].signup_t;
  42. }
  43. }
  44. void afis()
  45. {
  46. short ap[10005]={0};
  47. int s=0;
  48. for(int i=1;i<=nr;++i)
  49. for(int j=1;j<=solc[i].nrel;++j)
  50. ap[solc[i].c[j]]++;
  51. for(int i=0;i<=1000;++i)
  52. if(ap[i]) s+=i;
  53. if(s>smax)
  54. {
  55. smax=s;
  56. nrsol=nr;
  57. for(int i=1;i<=nr;++i)
  58. sol[i]=solc[i];
  59. }
  60. }
  61. void bk(int pas)
  62. {
  63. if (pas <= d)
  64. {
  65. for (int q = 1; q <= n; ++q)
  66. {
  67. int pozi[10005];
  68. for (int i = 1; i <= v[q].N; ++i)
  69. pozi[i] = v[q].book[i];
  70. gen_perm(v[q].N, pozi);
  71. for (int k = 0; k < v[q].N; ++k)
  72. {
  73. for (int i = 1; i <= d - v[i].signup_t + 1; ++i)
  74. {
  75. if (verif(i, i + v[i].signup_t - 1))
  76. {
  77. for (int j = 1; j <= v[i].signup_t; ++j)
  78. b[j] |= 1;
  79. nr++;
  80. solc[nr].ind=q;
  81. for (int j = 1; j <= v[q].N - k; ++j)
  82. solc[nr].c[j] = v[q].book[j];
  83. solc[nr].nrel=q;
  84. bk(pas+v[q].signup_t);
  85. nr--;
  86. for (int j = 1; j <= v[i].signup_t; ++j)
  87. b[j] ^= 1;
  88. }
  89. }
  90. }
  91. }
  92. }
  93. else afis();
  94. }
  95. int main()
  96. {
  97. read();
  98. bk(1);
  99. g<<nrsol<<'\n';
  100.  
  101. for(int i=1;i<=nrsol;++i)
  102. {
  103. g<<sol[i].ind<<" "<<sol[i].nrel<<'\n';
  104. for(int j=1;j<=sol[i].nrel;++j) g<<sol[i].c[j]<<" ";
  105. g<<'\n';
  106. }
  107. return 0;
  108. }
  109.  
  110. /*void bk2(int pas,int ind)
  111. {
  112. library x=v[ind];
  113. if(pas<x.N)
  114. {
  115. for(int i=1;i<=x.N;++i)
  116. {
  117. bool ok=0;
  118. ap[x.book[i]]++;
  119. if(lib[ind].nrb<=x.books_per_day)
  120. lib[ind].poz[lib[ind].nrd][++lib[ind].nrb]=x.book[i],ok=1;
  121. else lib[ind].poz[++nrd][nrb]=x.book[i];
  122. bk2(pas+1,ind);
  123. ap[x.book[i]]--;
  124. if(ok) lib[ind].nrb--;
  125. else lib[ind].nrd--;
  126. }
  127. }
  128. }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement