Pagini recente » Rating Adi Florescu (adi.florescu) | Cod sursa (job #2501539) | Cod sursa (job #1769911) | Cod sursa (job #1744486) | Cod sursa (job #1889483)
#include <iostream>
#include <fstream>
using namespace std;
struct rucs
{
int val,gr;
};
struct vect
{
float ra;
int poz;
};
rucs a[10000],s;
int n,g;
vect v[1000];
void citire()
{
ifstream f("rucsac.in");
f>>n>>g;
for(int i=0;i<n;i++)
{
f>>a[i].gr>>a[i].val;
}
}
void raport()
{
for(int i=0;i<n;i++)
{
v[i].ra=(float)a[i].val/a[i].gr;
v[i].poz=i;
}
}
void sortare()
{
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(v[i].ra<v[j].ra)
{
vect aux=v[i];
v[i]=v[j];
v[j]=aux;
}
}
void adaugare()
{
for(int i=0;i<n;i++)
{
if(s.gr+a[v[i].poz].gr<=g)
{
s.gr=s.gr+a[v[i].poz].gr;
s.val=s.val+a[v[i].poz].val;
}
else if(s.gr-a[v[i-1].poz].gr+a[v[i].poz].gr<=g && s.val-a[v[i-1].poz].val+a[v[i].poz].val>s.val)
{
s.gr=s.gr-a[v[i-1].poz].gr+a[v[i].poz].gr;
s.val=s.val-a[v[i-1].poz].val+a[v[i].poz].val;
}
}
}
void afisare()
{
ofstream g("rucsac.out");
g<<s.val;
}
int main()
{
citire();
raport();
sortare();
adaugare();
afisare();
return 0;
}