Cod sursa(job #2291750)

Utilizator TheSeekerRobert Cristian Dobra TheSeeker Data 28 noiembrie 2018 16:27:02
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <set>
using namespace std;

ifstream fin ("rucsac.in");
ofstream fout("rucsac.out");

int n,g,i,j,maxim;
pair<int,int> v[5005];

void citire(){
    fin>>n>>g;
    for (i=1;i<=n;i++)
        fin>>v[i].first>>v[i].second;
}

void sortare(){
    for (i=1;i<n;i++)
        for (j=i+1;j<=n;j++)
            if (v[i].second<v[j].second)
                swap(v[i],v[j]);
    for (i=1;i<n;i++)
        for (j=i+1;j<=n;j++)
            if (v[i].first>v[j].first && v[i].second==v[j].second)
                swap(v[i],v[j]);
}

int rucsac(int i){
    int k=0;
    int sol=0;
    while (k<g && i<=n){
        if (k+v[i].first<=g){
            k+=v[i].first;
            sol+=v[i].second;
        }
        i++;
    }
    return sol;
}

int main(){
    citire();
    sortare();
    for (i=1;i<=n;i++)
        maxim=max(maxim,rucsac(i));
    fout<<maxim;
    fin.close();
    fout.close();
    return 0;
}