Cod sursa(job #2700641)

Utilizator Ana_22Ana Petcu Ana_22 Data 28 ianuarie 2021 12:11:30
Problema Energii Scor 45
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 1000
#define SMAX 10000000

int e[NMAX+1], c[NMAX+1];
int cost[2][SMAX];

int main() {
    FILE *fin, *fout;
    int n, w, se, sc, i, j, g, b;

    fin = fopen( "energii.in", "r" );
    fscanf( fin, "%d%d", &n, &w );
    se = sc = 0;
    for( i = 1; i <= n; i++ ) {
      fscanf( fin, "%d%d", &e[i], &c[i] );
      se += e[i];
      sc += c[i];
    }
    fclose( fin );

    fout = fopen( "energii.out", "w" );
    if( se < w )
      fprintf( fout, "-1\n" );
    else {
      g = se - w;
      for( i = 1; i <= n; i++ ) {
        for( j = 0; j <= g; j++ ) {
          b = i & 1;
          cost[b][j] = cost[1-b][j];
          if( j >= e[i] && cost[b][j] < cost[1-b][j-e[i]] + c[i] )
            cost[b][j] = cost[1-b][j-e[i]] + c[i];
        }
      }
      fprintf( fout, "%d\n", sc - cost[n&1][g] );
    }
    fclose( fout );
    return 0;
}