Cod sursa(job #19166)

Utilizator szakiold name szaki Data 18 februarie 2007 20:40:23
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
/*#include "stdafx.h"
#include "infoarena.h"

#include <conio.h>/**/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define _TEMPLATE_
#ifdef _TEMPLATE_

#ifndef _INC_CONIO
void clrscr()
{
    freopen("energii.out", "w", stdout);
}
void getch() {}
#else
void clrscr() {}
#endif

#define repf(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) repf(i,0,n)
#define min(a,b) (((a) < (b)) ? (a) : (b))

#define MAXG 1001
#define MAXW 5001
#define INF 10000


int main()
{
    int *a0 = new int(MAXW), *a1 = new int(MAXW), *aux;
    int c[MAXG], e[MAXG];
    int g,w;
    int i,j;

    clrscr();
    FILE *fin = fopen("energii.in", "r");
    fscanf(fin,"%d\n%d\n", &g, &w);
    rep(i, g) fscanf(fin,"%d %d\n", &e[i], &c[i]);

    for(i = 1; i <= e[0]; i++) a0[i] = c[0];
    for(; i <= w; i++) a0[i] = INF;

    for(j = 1; j < g; j++)
    {
        for(i = 1; i <= e[j]; i++)
            a1[i] = min(c[j], a0[i]);
        for(; i <= w; i++)
            a1[i] = min(a0[i-e[j]] + c[j], a0[i]);
        aux = a1; a1 = a0; a0 = aux;
    }

    if (a0[w] >= INF) printf("-1");
    else printf("%d", a0[w]);
    getch();
    return 0;
}

#endif