Cod sursa(job #2588094)

Utilizator anabatAna Batrineanu anabat Data 24 martie 2020 14:01:22
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#include <algorithm>

#define NMAX 1001
#define WMAX 5001
#define VMAX 10001
#define INF 1000000000

struct energii {
  int cant;
  int cost;
};
struct energii v[NMAX+1];

int d[2][VMAX+2];

int main()
{
  FILE *fin,*fout;
  fin=fopen("energii.in","r");
  fout=fopen("energii.out","w");

  int n,W,i,j,total,MIN;
  fscanf(fin,"%d%d",&n,&W);
  total=0;
  for(i=1;i<=n;i++){
    fscanf(fin,"%d%d",&v[i].cant,&v[i].cost);
    total+=v[i].cant;
  }
  for(j=1;j<=VMAX;j++){
    d[0][j]=INF;
  }
  ///d[1][v[1].cant]=v[1].cost; //initializare
  for(i=1;i<=n;i++){
    d[i%2][0]=0;
    for(j=1;j<=VMAX;j++)
      d[i%2][j]=d[(i - 1) % 2][j];
      for(j=v[i].cant;j<=VMAX;j++)
        d[i%2][j]=std::min(d[i%2][j], d[(i-1)%2][j-v[i].cant]+v[i].cost);
  }
  MIN=INF;
  for(j=W;j<=VMAX;j++){
    if(d[n%2][j]<MIN){
      MIN=d[n%2][j];
    }
  }
  if(MIN!=INF)
    fprintf(fout,"%d",MIN);
  else
    fprintf(fout,"-1");

  fclose(fin);
  fclose(fout);
  return 0;
}