Advertisement
a53

schema

a53
Aug 25th, 2022
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. #include<fstream>
  2. #include<bitset>
  3. #include<algorithm>
  4. using namespace std;
  5. ifstream cin("schema.in");
  6. ofstream cout("schema.out");
  7. const int GMAX = 5e3 + 1;
  8. const int NMAX = 2e3 + 1;
  9. int cost[NMAX],suffix[NMAX];
  10. bitset<GMAX> pot;
  11. bitset<GMAX> nou;
  12.  
  13.  
  14. int main()
  15. {
  16. pot[0] = 1;
  17. int n,g;
  18. cin >> n >> g;
  19. for(int i = 1; i <= n ; i++)
  20. {
  21. cin >> cost[i];
  22. }
  23. sort(cost + 1,cost + 1 + n,greater<int> ());
  24.  
  25. /// construiesc sufixe
  26. suffix[n] = 0;
  27. for(int i = n - 1; i >= 1; i--)
  28. {
  29. suffix[i] = suffix[i + 1] + cost[i + 1];
  30. }
  31. /// dinamica
  32. int maxbani = g - suffix[1] - cost[1]; /// cazul in care investesc in toate proiectele
  33.  
  34. for(int nu = 1; nu <= n ; nu++) /// fixez cel mai mic proiect in care nu investesc
  35. {
  36. int mici = suffix[nu]; /// investesc automat in cele care au costul mai mic
  37.  
  38. for(int mari = 0; mari <= g ; mari++) /// selectez o submultime de proiecte care au toate costul mai mare decat proiectul in care nu investesc
  39. {
  40. if(pot[mari]) ///verific daca pot face suma cu o submultime de proiecte mai mari de pana acum
  41. {
  42. int rez = g - mici - mari; /// suma de bani ramasa dupa investitiile facute
  43.  
  44. if(rez >= 0 && rez < cost[nu]) // verific daca rezultatul e mai mic decat proiectul in care nu trebuie sa investim
  45. {
  46. maxbani = max(maxbani,rez); ///updatez maximul
  47. }
  48. }
  49. }
  50. nou.reset();
  51. for(int mari = 0 ; mari <= g ; mari++) /// updatez dinamica
  52. {
  53. if(pot[mari])
  54. {
  55. nou[mari] = 1;
  56. if((mari + cost[nu]) <= g)
  57. {
  58. nou[mari + cost[nu]] = 1;
  59. }
  60. }
  61. }
  62. pot = nou;
  63. }
  64. cout<<maxbani<<'\n';
  65. cin.close();
  66. cout.close();
  67. return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement