Cod sursa(job #1889499)

Utilizator iustin_roIustin Buhuta iustin_ro Data 22 februarie 2017 19:05:13
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#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=a[i].val;
        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<=s.gr && 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;
}