Cod sursa(job #1989321)

Utilizator andreeagoideaAndreea Goidea andreeagoidea Data 6 iunie 2017 21:02:32
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

struct energii
{
    int c, e;
};

energii v[1001];

int suma[15002];

bool cmp (energii a, energii b)
{
    if(a.e<b.e) return true;
    return false;
}

int main()
{
    int G, W, i, j, max, pos;
    f>>G>>W;
    for(i=1; i<=G; i++) f>>v[i].e>>v[i].c;
    max=0;
    sort(v+1, v+G, cmp);
    for(i=1; i<=G; i++)
    {
        for(j=max; j>=1; j--)
            if(suma[j]!=0)
            {
                if(suma[j+v[i].e]>suma[j]+v[i].c || suma[j+v[i].e]==0)
                {
                    suma[j+v[i].e]=suma[j]+v[i].c;
                    if(j+v[i].e<=pos && j+v[i].e>=W) pos=v[i].e;
                }
            }
        max=j+v[i].e;
        if(suma[v[i].e]>v[i].c || suma[v[i].e]==0)
            suma[v[i].e]=v[i].c;
    }
    if(pos==15001) g<<"-1";
    else g<<suma[pos];
    return 0;
}