Cod sursa(job #582457)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 15 aprilie 2011 13:21:02
Problema Energii Scor 100
Compilator cpp Status done
Runda brasov_final_round Marime 0.94 kb
#include <cstdio>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

#define inf 1<<30
#define N 1024
#define e first
#define c second

pair <int , int > v[N];

int main ()
{

    ifstream in ("energii.in");
    freopen ("energii.out","w",stdout);
    int n,k;
    in>>n>>k;
    for(int i=1;i<=n;++i)
        in>>v[i].e>>v[i].c;
    in.close ();
    vector<int> cs(k+1,-1);
    cs[0]=0;
    int m=inf;
    for(int i=1;i<=n;++i)
        for(int j=k;j>-1;--j)
            if(cs[j]>-1){
                if ( j+v[i].e>k && cs[j]+v[i].c<m )
                    m=v[i].c+cs[j];
                if ( k>=j+v[i].e && (cs[j+v[i].e]==-1 || cs[j]+v[i].c<cs[j+v[i].e]) )
                    cs[j+v[i].e]=cs[j]+v[i].c;
            }
    if(m==inf){
    printf("%d\n",cs[k]);
    exit(0);
    }
    if(cs[k]==-1){
    printf("%d\n",m);
    exit(0);
    }
    printf("%d\n",min(m,cs[k]));

return 0;}