Cod sursa(job #1089769)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 21 ianuarie 2014 22:04:46
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;

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

void Input();
void Knapsack();
void Output();

vector<pair<int,int> > V;
int n,g,sol[10000],smax;

int Solution(99999);

int main()
{
    Input();
    Knapsack();
    Output();
    return 0;
}

void Input()
{
    int x,y;
    is >> n >> g;
    for ( int i = 0; i <= g; ++i )
        sol[i] = -1;
    for ( int i = 1; i <= n; ++i )
    {
        is >> x >> y;
        smax += y;
        V.push_back(make_pair(x,y));
    }

}

void Knapsack()
{
    sol[0] = 0;
    for ( int i = 0; i < V.size(); ++i )
        for ( int j = g - V[i].second; j >= 0; --j )
            if ( sol[j+V[i].second] < sol[j] + V[i].first )
                sol[j+V[i].second] = sol[j] + V[i].first;
}

void Output()
{
    for ( int i = 0; i <= smax; ++i )
        if ( sol[i] >= g )
        {
            os << i;
            break;
        }
    if ( i > smax )
    os << "-1";
}