Cod sursa(job #2626652)

Utilizator euyoTukanul euyo Data 7 iunie 2020 13:11:09
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#define INF 1000000000
#define min( a, b ) a < b ? a : b

int cost[1001], e[1001]; 
int minCost[1001][5002];

int main() {
  FILE *fin = fopen( "energii.in", "r" );
  FILE *fout = fopen( "energii.out", "w" );
  int G, W, i, j, s;
  
  fscanf( fin, "%d%d", &G, &W );
  s = 0;
  for ( i = 1; i <= G; ++i ) {
	fscanf( fin, "%d%d", &e[i], &cost[i] );
    s += e[i];
  }
  for ( j = 0; j <= W; ++j ) {
	if ( e[1] >= j ) {
	  minCost[1][j] = cost[1];
	} else {
	  minCost[1][j] = INF;
	}
  }
  for ( i = 2; i <= G; ++i ) {
	for ( j = 0; j <= W; ++j ) {
	  if ( e[i] < j ) {
	    minCost[i][j] = min( minCost[i - 1][j], minCost[i - 1][j - e[i]] + cost[i] );
	  } else {
        minCost[i][j] = min( minCost[i - 1][j], cost[i] );
	  }
	}
  }
  if ( s >= W ) {
    fprintf( fout, "%d", minCost[G][W] );
  } else {
    fprintf( fout, "-1" );
  }
  fclose( fin );
  fclose( fout );
  return 0;
}