Pagini recente » Cod sursa (job #191302) | Cod sursa (job #1519312) | Cod sursa (job #991158) | Cod sursa (job #651809) | Cod sursa (job #1536256)
#include <iostream>
#define Nmax 10001
#include <fstream>
#include <iomanip>
using namespace std;
ifstream f("rucsac.in");
ofstream g("rucsac.out");
int N,k;
float G;
struct obiect{
float g,c,r;}
a[Nmax],s[Nmax];
void read()
{ f>>G>>N;
for(int i=1;i<=N;i++)
f>>a[i].g>>a[i].c;}
void ordonare()
{
obiect aux;
for(int i=1;i<N;i++)
for(int j=i+1;j<=N;j++)
if(a[i].c/a[i].g<a[j].c/a[j].g)
{aux=a[i];a[i]=a[j];a[j]=aux;}
}
void write(obiect a[])
{ int c=0;
for(int i=1;i<=k;i++)
{c=c+a[i].c*a[i].r;}
g<<c<<"\n";
}
void greedy()
{
int i=1;
float sp=0;
while(sp<G)
{ if(sp+a[i].g<=G)
{sp=sp+a[i].g;
s[++k]=a[i];
s[k].r=1;}
else
{
s[++k]=a[i];
s[k].r=(G-sp)/a[i].g;
sp=G;
}
i++;
}
write(s);
}
int main()
{read();
ordonare();
greedy();
}