Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- int st[100], n, m;
- int a[100], L;
- int surjectiva()
- {
- int i, j, x;
- for(j = 1; j <= n; j++)
- {
- for(i = 1, x = 0; i <= m && !x; i++)
- if(st[i] == j)
- x = 1;
- if(!x)
- return 0;
- }
- return 1;
- }
- void init(int k)
- {
- st[k] = 0;
- }
- int succesor(int k)
- {
- if(st[k] < st[k-1] + 1 && st[k] < n)
- {
- st[k]++;
- return 1;
- }
- return 0;
- }
- int valid(int k)
- {
- if(k==m && !surjectiva())
- return 0;
- return 1;
- }
- int solutie(int k)
- {
- return k == m;
- }
- void tipar()
- {
- int s=0;
- for(int i = 1; i <= m; i++)
- s+=a[st[i]];
- if(s==L)
- {
- for(int i = 1; i <= m; i++)
- cout<<a[st[i]]<<" ";
- cout<<endl;
- }
- }
- void bkt(int k)
- {
- init(k);
- while(succesor(k))
- if(valid(k))
- if(solutie(k))
- tipar();
- else
- bkt(k+1);
- }
- int main()
- {
- ifstream fin("citire.txt");
- fin>>L;
- fin>>n;
- int sum=0, minn=99999;
- for(int i=1; i<=n; i++)
- {
- fin>>a[i];
- sum+=a[i];
- if(a[i]<minn)
- minn=a[i];
- }
- if(sum>L)
- {
- cout<<"Nu exista";
- return 0;
- }
- int k=n;
- while(sum+minn<=L)
- {
- sum+=minn;
- k++;
- }
- //cout<<"Nr maxim m: "<<k;
- for(int i=n+1; i<=k; i++)
- {
- m=i;
- bkt(1);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement