Cod sursa(job #1902905)

Utilizator tanduraDomnita Dan tandura Data 4 martie 2017 20:47:59
Problema Energii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <stdio.h>

#define NMAX 1002
#define WMAX 5002
#define MAX_VAL 11000000

typedef struct
{
    char viz;
    int cost;
}Element;

Element v[NMAX];

int main()
{
    unsigned short int n,w,eg,cg;
    FILE *f,*g;

    f = fopen("energii.in", "r");
    g = fopen("energii.out", "w");

    fscanf(f,"%hu\n%hu", &n, &w);
    
    for(int i = 1; i <= w; i++)
        v[i].cost = MAX_VAL;
    
    v[0].viz = 1;
    for(int i = 0; i < n; i++)
    {
        fscanf(f, "%hu%hu", &eg, &cg);

        for(int j = w; j >= 0; j--)
        {
            if(v[j].viz == 1)
            {
                if(j + eg >= w)
                {
                    v[w].viz = 1;
                    if(v[j].cost + cg < v[w].cost)
                        v[w].cost = v[j].cost + cg;
                }
                else
                {
                    v[j + eg].viz = 1;
                    if(v[j].cost + cg < v[j + eg].cost)
                        v[j + eg].cost = v[j].cost + cg;
                }
            }
        }
    }

    if(v[w].viz != 1)
    {
        fprintf(g,"-1\n");
    }
    else
    {
        fprintf(g, "%d", v[w].cost);
    }

    fclose(g);
    fclose(f);
    return 0;
}