Pagini recente » Cod sursa (job #261437) | Cod sursa (job #3172819) | Cod sursa (job #1220798) | Cod sursa (job #648102) | Cod sursa (job #437885)
Cod sursa(job #437885)
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
struct Gutui
{
long h,g;
}*v;
long n,h,pas,i,j,k,gmax,nmax,s,nr,*x;
void citire_fisier ()
{
ifstream f("gutui.in");
f>>n>>h>>pas;
v= new Gutui [n];
x= new long[n];
for(i=1;i<=n;i++)
f>>v[i-1].h>>v[i-1].g;
f.close();
}
void analiza(long *x,long n)
{
long a;
s=0; //ne intereseaza greutatea cea mai mare
nr=0; //si nr cat mai mare de gutui
for(a=0;a<n;a++)
if(v[x[a]].h+a*pas<=h)
{
s+=v[x[a]].g;
nr++;
}
if(s>gmax) gmax=s;
else if(s==gmax && nr>nmax) nmax=nr;
}
void permutari(long n)
{
for(i=0;i<n;i++)x[i]=i;
analiza(x,n);
do
{
k=n-2;
while(x[k]>x[k+1] && k>=0) k--;
if(k>=0)
{
j=n-1;
while(x[j]<=x[k]) j--;
x[k]=x[k]+x[j];
x[j]=x[k]-x[j];
x[k]=x[k]-x[j];
if(k<n-2)
for(i=1;i<=(n-1-k)/2;i++)
{
x[k+i]=x[k+i]+x[n-i];
x[n-i]=x[k+i]-x[n-i];
x[k+i]=x[k+i]-x[n-i];
}
analiza(x,n);
}
}while(k>=0);
}
void main()
{
//FILE *f2;
clrscr();
citire_fisier();
//cout<<n<<" "<<h<<" "<<pas<<endl;
//for(i=0;i<n;i++)
//cout<<v[i].h<<" "<<v[i].g<<endl;
permutari(n);
cout<<"greutatea maxima este: "<<gmax;
delete x;
delete v;
getch();
}