Cod sursa(job #1636237)

Utilizator victorobamavictor olaru victorobama Data 7 martie 2016 00:20:02
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>

using namespace std;
ifstream f("rucsac.in");
ofstream g("rucsac.out");
int greutate,a[5005],b[5005],i,n,aux,gr,sortat,s,l,x,kappa,ok1,maxi,greux;
void citire()
{
    f>>n>>greutate;
    for(i=1;i<=n;i++)
    {
        f>>a[i]>>b[i];

    }

}
void sortare()
{  while(!sortat)
        {sortat=1;
        for(i=1;i<n;i++)
            if(b[i]*a[i+1]<b[i+1]*a[i])
      {
        aux=a[i];
        a[i]=a[i+1];
        a[i+1]=aux;
        aux=b[i];
        b[i]=b[i+1];
        b[i+1]=aux;
        sortat=0;
      }
      else if(b[i]*a[i+1]==b[i+1]*a[i]&&b[i]<b[i+1])
      {
          aux=a[i];
        a[i]=a[i+1];
        a[i+1]=aux;
        aux=b[i];
        b[i]=b[i+1];
        b[i+1]=aux;
        sortat=0;
      }

        }
}


int main()
{
   citire();

   sortare();
    for(i=1;i<=n;i++)
    {s=s+b[i];gr=gr+a[i];if(gr>greutate){s=s-b[i];gr=gr-a[i];maxi=a[i+1];
    while(!ok1)
    {ok1=1;
    for(l=i+1;l<=n;l++)
       if(a[l]+gr<=greutate){ok1=0;
       if(maxi<b[l]){maxi=b[l];greux=a[l];}
       s=s+maxi;gr=gr+greux;
       }
    }


                                       }
    }
   g<<s<<'\n';
  f.close();
   g.close();
   return 0;
}