Cod sursa(job #1097610)

Utilizator baicuviorelBaicu Viorel baicuviorel Data 3 februarie 2014 17:38:36
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>
#include <cstdio>
#include <algorithm>
using namespace std;

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


struct g{ int e; int c;} gs[1001];
int W,n;

bool compare(g g1, g g2)
{
    if(g1.c==g2.c)
        return g1.e>g2.e;
    return g1.c<g2.c;
}

int main()
{
   int i,s=0,cm,q=0;
   in>>n>>W;
   for(i=1;i<=n;i++)
   {
        in>>gs[i].e>>gs[i].c;
        s+=gs[i].e;
        q+=gs[i].c;
   }
   if(s<W)
    {
        out<<"-1";
        return 0;
    }
    if(s==W)
    {
        out<<q;
        return 0;
    }
    sort(gs+1,gs+n,compare);

    int found=0;
    for(i=1;i<=n;i++)
    {
        s=gs[i].e;
        int sc=gs[i].c;
        if(gs[i].e>=W)
        {
            if(found==0)
            {
                cm=gs[i].c;
                found++;
            }
            if(gs[i].c<cm)
            {
                cm=gs[i].c;
            }
        }
        else
        {
            int j=i;
            while(s<W||++j<=n)
            {
                s+=gs[j].e;
                sc+=gs[j].c;
            }
            if(s>=W)
            {
                 if(found==0)
                    {
                        cm=sc;
                        found++;
                    }
                    if(sc<cm)
                    {
                        cm=sc;
                    }
            }
        }

    }
    out<<cm;
    return 0;
}