Cod sursa(job #2806224)

Utilizator namesurname01Name Surname namesurname01 Data 22 noiembrie 2021 14:22:43
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>

using namespace std;
FILE* f, * g;

int a[1002][5002];
struct elem
{
    int e, c;
}v[1002];

int main()
{
    int n, E, i, j, lc, lp;
    f = fopen("energii.in", "r");
    g = fopen("energii.out", "w");
    fscanf(f, "%d", &n);
    fscanf(f, "%d", &E);
    for (i = 1;i <= n;i++)
        fscanf(f, "%d %d", &v[i].e, &v[i].c);

    for (j = 0;j <= E;j++)
        a[0][j] = 2000000000;

    for (i = 1;i <= n;i++)
    {
        for (j = 1;j <= E;j++)
        {
            if (v[i].e <= j)
            {
                if (v[i].c + a[i - 1][j - v[i].e] < a[i - 1][j])
                    a[i][j] = v[i].c + a[i - 1][j - v[i].e];
                else
                    a[i][j] = a[i - 1][j];
            }
            else
                if (a[i - 1][j] > v[i].c)
                    a[i][j] = v[i].c;
                else
                    a[i][j] = a[i - 1][j];
        }

    }
    if (a[n][E] == 2000000000)
        fprintf(g, "-1");
    else
        fprintf(g, "%d", a[n][E]);
    fclose(f);
    fclose(g);
    return 0;
}