Cod sursa(job #280675)

Utilizator Addy.Adrian Draghici Addy. Data 13 martie 2009 15:17:14
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#define DIM 1002
#define INF 10001

int e[DIM],c[DIM],s[5002];
int g,w,i,k,pMax,j,ok,min;

int main() {

  FILE *f = fopen("energii.in","r");
  FILE *q = fopen("energii.out","w");

  fscanf(f,"%d %d",&g,&w);

  for (i=1; i<=g; i++)
    fscanf(f,"%d %d",&e[i],&c[i]);

  for (i=1; i<=5001; i++)
    s[i] = INF;

  pMax = 0;

  for (i=1; i<=g; i++)
    for (j=pMax; j>=0; j--) {
      if (s[j]!=INF) {
	if (j+e[i] > w) {
	  if (s[w] > s[j]+c[i])
	    s[w] = s[j]+c[i];
	}
	else
	  if (s[j+e[i]] > s[j]+c[i])
	    s[j+e[i]] = s[j]+c[i];
      }

      if (j+e[i] > pMax && j+e[i] <= w)
	pMax = j+e[i];
    }

  min = INF;
  ok = 0;

  for (i=1; i<=5001; i++)
    if (i>=w  && s[i]<min) {
      min = s[i];
      ok = 1;
    }

  if (!ok)
    fprintf(q,"-1");
  else
    fprintf(q,"%d",min);

  fclose(f);
  fclose(q);

  return 0;
}