Cod sursa(job #1870231)

Utilizator herbertoHerbert Mohanu herberto Data 6 februarie 2017 15:09:25
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
using namespace std;
#define MAXN 5001
#define MAXG 10001

int e[MAXN], c[MAXN], d[2][MAXG];
//D[i][j] - profitul maxim pe care-l putem obtine adaugand o submultime a primelor i obiecte, insumand greutatea j
int main(){
  FILE*fin=fopen("energii.in", "r");
  FILE*fout=fopen("energii.out", "w");
  int n, w, i, j, min, 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]);
    emax+=e[i];
    cmax+=c[i];
  }
  min=MAXN*MAXN;
  if(emax<w)
    fprintf(fout, "-1");
  else{
    for(i=1; i<=n; i++){
      for(j=c[i]; j<=cmax; j++){
        d[1][j]=d[0][j];
        if(e[i]<=j)
          if(d[0][j-e[i]]+c[i]>d[1][j])
            d[1][j]=d[0][j-e[i]]+c[i];
        if(d[1][j]>=w && j<min)
          min=j;
      }
      for(j=0; j<=w; j++){
        d[0][j]=d[1][j];
        d[1][j]=0;
      }
    }

    fprintf(fout, "%d", min);
  }
  return 0;
}