Cod sursa(job #931341)

Utilizator AnduuFMI Alexandru Banu Anduu Data 28 martie 2013 10:21:19
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
using namespace std;
int g[5001], c[5001], n, i, G, p = 0;
double ef[5001];
void citire ()
{
    ifstream in ("rucsac.in");
    in >> n >> G;
    for (i = 1; i <= n; ++i)
    in >> g[i] >> c[i];
    in.close ();
}
void eficienta ()
{
    for (i = 1; i <= n; ++i)
    ef[i] = (double) c[i] / g[i];
}
void sort ()
{
    double aux;
    int j;
    for (i = 1; i < n; ++i)
    for (j = i + 1; j <= n; ++j)
    if (ef[i] < ef[j])
    {
        aux = ef[i];
        ef[i] = ef[j];
        ef[j] = aux;
        aux = c[i];
        c[i] = c[j];
        c[j] = aux;
        aux = g[i];
        g[i] = g[j];
        g[j] = aux;
    }
}
int solve ()
{
    for (i = 1; i <= n; ++i)
    if (G - g[i] >= 0)
    {
        p += c[i];
        G -= g[i];
    }
    return p;
}
void afis (int p)
{
    ofstream out ("rucsac.out");
    out << p << '\n';
    out.close ();
}
int main()
{
    citire ();
    eficienta ();
    sort ();
    afis (solve ());
    return 0;
}