Cod sursa(job #968489)

Utilizator VladMSBonta vlad valentin VladMS Data 2 iulie 2013 10:50:38
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMAX 1005
#define newtype void
#define comb 5894759
#define rez 0
FILE *fin=fopen("energii.in", "r");
FILE *fout=fopen("energii.out", "w");
long v[10011000], x, a, b, c, xx;

struct structura
{
    int aa, bb;
};

structura w[NMAX];

newtype read()
{
    long cc=0;
    fscanf(fin, "%ld%ld", &b, &cc);
    for (x=1;x<=b;x++)
    {
        fscanf(fin, "%d%d", &w[x].aa, &w[x].bb);
        xx+=w[x].aa;
        cc+=w[x].bb;
    }
    if (xx<cc)
    {
        fprintf(fout, "-1");
        exit(rez);
        fclose(fin);
        fclose(fout);
    }
    else
        if (xx==cc)
        {
            fprintf(fout, "%ld", cc);
            exit(rez);
            fclose(fin);
            fclose(fout);
        }
    memset(v, comb, 10010500);
}

newtype valoare()
{
    for (x=1;x<=b;x++)
    {
        for (a=c;a>=0;a--)
            if (v[a]!=comb&&v[a+w[x].aa]>v[a]+w[x].bb)
                v[a+w[x].aa]=v[a]+w[x].bb;
            if (v[w[x].aa]>w[x].bb)
                v[w[x].aa]=w[x].bb;
    }
}

newtype solve()
{
    long cel=comb;
    for (x=c;x<=xx;x++)
        if (v[x]<cel)
            cel=v[x];
    fprintf(fout, "%ld", cel);
}

int main()
{
   read();
    valoare();
    solve();
    fclose(fin);
    fclose(fout);
    return (rez);
}