Cod sursa(job #1870319)

Utilizator herbertoHerbert Mohanu herberto Data 6 februarie 2017 16:05:58
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<stdio.h>
using namespace std;
#define MAXN 1001
#define MAXG 16001
#define INF 100000000
int e[MAXN], c[MAXN], d[MAXN][MAXG];
//D[i][j] - profitul maxim pe care-l putem obtine adaugand o submultime a primelor i obiecte, insumand greutatea j
int minim( int a , int b ){
  if(a<b)
    return a;
  return b;
}
int main(){
  FILE*fin=fopen("energii.in", "r");
  FILE*fout=fopen("energii.out", "w");
  int n, w, i, j, cmax, emax;
  fscanf(fin, "%d%d", &n, &w);
  cmax=emax=0;
  for(i=1; i<=n; i++){
    fscanf(fin, "%d%d", &e[i], &c[i]);
    cmax+=c[i];
  }
  for(i=0; i<=MAXN-1; i++)
    for(j=0; j<=MAXG-1; j++)
      d[i][j]=INF;
//  if(emax<w)
//    fprintf(fout, "-1");
  for(i=1; i<=n; i++){
    for(j=1; j<=w; j++){
      d[i][j]=d[i-1][j];
      if(e[i]<j)
        d[i][j]=minim(d[i-1][j-e[i]]+c[i], d[i][j]);
      else
        d[i][j]=minim(d[i][j], c[i]);
    }
  }
  if(d[n][w]==INF)
    fprintf(fout, "-1");
  else
    fprintf(fout, "%d", d[n][w]);
  return 0;
}