Cod sursa(job #907152)

Utilizator CrescentselectJicol Crescent Crescentselect Data 7 martie 2013 17:48:53
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<iostream>
#include <fstream>
#include<algorithm>
#include<vector>

using namespace std;

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

# define N 5001
# define M 500001

int g[N],p[N],v[M];

int n, G,minim = 9999999;
int s;

void citire()
{
    in>>n>>G;
    for( int i=1;i<=n;i++)
    {
        in>>g[i]>>p[i];
        s += p[i];
    }
    for( int i=1;i<=s;i++)
    {
        v[i] = 9999999;
    }
}
void proces()
{
    for( int i=1;i<=n;i++)
    {
        for( int j = s - p[i]; j>0; j--)
        {
            if(v[j]!=9999999)
            {
                if(v[j]+p[i] < v[j+g[i]])
                {
                    v[j+g[i]] = v[j]+p[i];
                }
            }
        }
        if(p[i]<v[g[i]])
        {
            v[g[i]]= p[i];
        }
    }
    for( int i=1;i<=s;i++)
    {
        if(v[i]<minim && v[i] >= G)
        {
            minim=v[i];
        }
    }
    out<<minim;
}
int main()
{
    citire();
    proces();
    return 0;
}