Cod sursa(job #1999656)

Utilizator Rodik_RodyRodica Vasilescu Rodik_Rody Data 11 iulie 2017 19:14:15
Problema Energii Scor 5
Compilator c Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#include <stdlib.h>
#define min(a,b) (a < b? a : b)
#define MAX 1001
#define INFINITE 10000001
int n, W;
int energie[MAX], cost[MAX];
long long v[1001][5001];

void readInput (){
    int i;
    FILE *f= fopen("energii.in","r");
    fscanf(f,"%d%d", &n,&W);
    for (i = 1; i <= n; i++)
        fscanf(f,"%d%d", &energie[i],&cost[i]);
}
void run ()
{
    int i, j, k;
    FILE *g= fopen("energii.out","w");

    for ( i = 0; i <= W; i++)
        v[0][i] = INFINITE;

    for ( i = 1; i <= n; i++)
        for ( j = 1; j <= W; j++){
            v[i][j] = v[i-1][j];
            if (  energie[i] >= j )
                v[i][j] =min( v[i-1][j],cost[i]);
            else v[i][j]=min(v[i-1][j],v[i - 1][j - energie[i]]+ cost[i]);
        }


    if( v[1][W] != INFINITE)
        fprintf(g,"%d", v[n][W]);
    else fprintf(g,"-1");
}
int main()
{
    readInput();
    run();
    return 0;
}