Cod sursa(job #2491838)

Utilizator RalucaSachelarieRaluca-Maria Sachelarie RalucaSachelarie Data 13 noiembrie 2019 12:23:49
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.04 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rucsac.in");
ofstream out("rucsac.out");
int valori[1000];
int greutati[1000];
int raport[1000];
int main()
{
    int n,capacitate,cnt,greutate,valoare,max,valFurat,cifra,cp,inceput,poz,cpVal,cpGreut;
    in>>n;
    in>>capacitate;
    cnt=0;
    while(cnt<n)
    {
      in>>greutate;
      greutati[cnt]=greutate;
      in>>valoare;
      valori[cnt]=valoare;
      raport[cnt]=valoare/greutate;
      cnt++;
    }
    cnt=0;
    max=0;
    ///sortam vectorul cu rapoarte
    ///schimbam si pozitiile din vectorii cu valori si greutati
    inceput=0;
    cpGreut=0;
    cpVal=0;
    poz=0;
    while(cnt<n)
    {
        cp=inceput;
        while(cp<n)
        {
            if(raport[cp]>max)
            {
                max=raport[cp];
                poz=cp;
            }
            cp++;
        }
        cp=raport[poz];
        raport[poz]=raport[cnt];
        raport[cnt]=cp;
        cpVal=valori[poz];
        valori[poz]=valori[cnt];
        valori[cnt]=cpVal;
        cpGreut=greutati[poz];
        greutati[poz]=greutati[cnt];
        greutati[cnt]=cpGreut;
        cnt++;
        inceput++;
    }
    ///adunam valorile rapoartelor maxime pana depasim capacitatea
    ///inainte sa depasim continuam sa adunam restul de rapoarte cu greutatea/2 si valoarea/2
    ///dupa continuam sa adunam rapoartele ramase pana le terminam si le impartim la tot mai mult
    cnt=0;
    greutate=0;
    valFurat=0;
    while(cnt<n&&greutate<capacitate)
    {
        cifra=1;
        if(greutate+greutati[cnt]<=capacitate)
        {
            greutate=greutate+greutati[cnt];
            valFurat=valFurat+valori[cnt];
        }
        else
        {
            while(greutate+greutati[cnt]/cifra>capacitate)
            {
                cifra++;
            }
            greutate=greutate+greutati[cnt]/cifra;
            valFurat=valFurat+valori[cnt]/cifra;
        }
        cnt++;
    }
    out<<valFurat;

    return 0;
}