Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- int N,K,H[25],T[25],E[25];///targy szam(N) + kapacitas(K) + targyak(T) + ertekek(E) + verem(H)
- int sT[25];///taskaban levok ossztomege
- int sE[25];///taskaban levok osszerteke
- int db;
- int opt;
- int osszT,osszE;
- ifstream f("adat.be");
- void Olvas()
- {
- f>>N>>K;
- for(int i=1;i<=N;i++)
- f>>T[i]>>E[i];
- f.close();
- }
- void Mutat()
- {
- if(sE[N]>=opt)
- {
- opt=sE[N];
- db++;cout<<db<<"."<<endl;
- cout<<"Index: ";
- for(int i=1;i<=N;i++)
- {
- cout.width(4);
- cout<<i;
- }
- cout<<endl;
- cout<<"Tomeg: ";
- for(int i=1;i<=N;i++)
- {
- cout.width(4);
- cout<<T[i];
- }
- cout<<endl;
- cout<<"Ertek: ";
- for(int i=1;i<=N;i++)
- {
- cout.width(4);
- cout<<E[i];
- }
- cout<<endl;
- cout<<"Zsak: ";
- for(int i=1;i<=N;i++)
- {
- cout.width(4);
- cout<<H[i];
- }
- cout<<endl;
- cout<<"Ossztomeg: "<<sT[N]<<" "<<"Osszertek: "<<sE[N]<<endl<<endl;
- }
- }
- int megoldas(int k)
- {
- return (k>N);
- }
- int Jo(int k)
- {
- return (sT[k]<=k);
- }
- void Back(int k)
- {
- if(megoldas(k))
- Mutat();
- else
- for(int i=0;i<=1;i++)
- {
- H[k]=i;
- sT[k]=sT[k-1]+T[k]*i;
- sE[k]=sE[k-1]+E[k]*i;
- if(Jo(k))
- Back(k+1);
- }
- }
- void Csere(int i, int j)
- {
- int s=T[i];T[i]=T[j];T[j]=s;
- s=E[i];E[i]=E[j];E[j]=s;
- }
- void Rendez()
- {
- for(int i=1;i<=N;i++)
- for(int j=i+1;j<=N;j++)
- if(E[i]/T[i]<E[j]/T[j])
- Csere(i,j);
- }
- int valogat(int p)
- {
- while(osszT+T[p]>K && p<=N)
- p++;
- return p;
- }
- void Moho()
- {
- int p=1;
- while(p<=N && osszT<=K)
- {
- int x=valogat(p);
- if(T[x]+osszT<=K && x<=N)
- {
- H[x]=1;
- osszT=T[x]+osszT;
- osszE=E[x]+osszE;
- p=x+1;
- }
- }
- sT[N]=osszT;sE[N]=osszE;
- }
- int main()
- {
- Olvas();
- Mutat();
- //Back(1);
- Rendez();
- Mutat();
- Moho();
- Mutat();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement