Advertisement
Guest User

ex4pag30

a guest
Oct 16th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int st[100], n, m;
  7. int a[100], L;
  8.  
  9. int surjectiva()
  10. {
  11.     int i, j, x;
  12.     for(j = 1; j <= n; j++)
  13.     {
  14.         for(i = 1, x = 0; i <= m && !x; i++)
  15.             if(st[i] == j)
  16.                 x = 1;
  17.         if(!x)
  18.             return 0;
  19.     }
  20.     return 1;
  21. }
  22.  
  23. void init(int k)
  24. {
  25.     st[k] = 0;
  26. }
  27.  
  28. int succesor(int k)
  29. {
  30.     if(st[k] < st[k-1] + 1 && st[k] < n)
  31.     {
  32.         st[k]++;
  33.         return 1;
  34.     }
  35.     return 0;
  36. }
  37.  
  38. int valid(int k)
  39. {
  40.     if(k==m && !surjectiva())
  41.         return 0;
  42.     return 1;
  43. }
  44.  
  45. int solutie(int k)
  46. {
  47.     return k == m;
  48. }
  49.  
  50. void tipar()
  51. {
  52.     int s=0;
  53.     for(int i = 1; i <= m; i++)
  54.         s+=a[st[i]];
  55.  
  56.     if(s==L)
  57.     {
  58.         for(int i = 1; i <= m; i++)
  59.             cout<<a[st[i]]<<"  ";
  60.         cout<<endl;
  61.     }
  62. }
  63.  
  64. void bkt(int k)
  65. {
  66.     init(k);
  67.     while(succesor(k))
  68.         if(valid(k))
  69.             if(solutie(k))
  70.                 tipar();
  71.             else
  72.                 bkt(k+1);
  73. }
  74.  
  75. int main()
  76. {
  77.     ifstream fin("citire.txt");
  78.     fin>>L;
  79.     fin>>n;
  80.     int sum=0, minn=99999;
  81.     for(int i=1; i<=n; i++)
  82.     {
  83.         fin>>a[i];
  84.         sum+=a[i];
  85.         if(a[i]<minn)
  86.             minn=a[i];
  87.     }
  88.  
  89.     if(sum>L)
  90.     {
  91.         cout<<"Nu exista";
  92.         return 0;
  93.     }
  94.  
  95.     int k=n;
  96.     while(sum+minn<=L)
  97.     {
  98.         sum+=minn;
  99.         k++;
  100.     }
  101.  
  102.     //cout<<"Nr maxim m: "<<k;
  103.     for(int i=n+1; i<=k; i++)
  104.     {
  105.         m=i;
  106.         bkt(1);
  107.     }
  108.  
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement