Mai intai trebuie sa te autentifici.

Cod sursa(job #88011)

Utilizator DastasIonescu Vlad Dastas Data 29 septembrie 2007 23:07:55
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>

const int maxg = 1001;
const int maxw = 10001;
const int inf = 1000000000;

FILE *in = fopen("energii.in","r"), *out = fopen("energii.out","w");

int n, w;
int en[maxg];
int cost[maxg];

int st = 0;

void read()
{
    fscanf(in, "%d %d", &n, &w);

    for ( int i = 0; i < n; ++i )
        fscanf(in, "%d %d", &en[i], &cost[i]), st += en[i];
}

int V[maxw];
int s1[maxw];
int s2[maxw];

inline int min(int x, int y)
{
    return x < y ? x : y;
}

int main()
{
    read();

    if ( st < w )
    {
        fprintf(out, "%d\n", -1);
        return 0;
    }

    for ( int j = 0; j < n; ++j )
    {
        for ( int i = w; i; --i )
        {
            int eng = i - en[j];
            if ( eng <= 0 )
            {
                if ( j == 0 ) s1[i] = cost[j];
                else s1[i] = min(s2[i], cost[j]);
            }
            else
            {
                if ( j == 0 ) s1[i] = inf;
                else s1[i] = min(s2[i], cost[j] + s2[eng]);
            }
        }

        for ( int j = 0; j <= w; ++j )
            s2[j] = s1[j];
    }
    fprintf(out, "%d\n", s1[w]);


	return 0;
}