Cod sursa(job #2973791)

Utilizator NIIN100Nistor Nichita NIIN100 Data 1 februarie 2023 22:18:39
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

struct elem
{
	int w, p;
};

bool cmp(elem i, elem j)
{
	if(i.p/i.w<j.p/j.w)
		return 1;
	else if(i.p/i.w>j.p/j.w)
		return 0;
	else
		return i.w<j.w;
}

int main()
{
    int n, g, i, pmax=0, ok;
    elem v[5001];
    in>>n>>g;
    for(int i=1; i<=n; i++)
	{
		in>>v[i].w>>v[i].p;
	}
	sort(v+1, v+n+1, cmp);
	i=n;
	while(g>0 and i>0)
	{
		if(v[i].w<=g){
			pmax+=v[i].p;
			g-=v[i].w;
		}
		else
		{
			ok=1;
			for(int j=i+1; i<=n and ok==1; j++)
			{
				if(v[i].p>v[j].p and v[i].w<=g+v[j].w)
				{
					ok=0;
					g-=v[i].w-v[j].w;
					pmax+=v[i].p-v[j].p;
					v[j].p=10001;
				}
			}
		}
		i--;
	}
	out<<pmax;
    return 0;
}