Cod sursa(job #1870103)

Utilizator herbertoHerbert Mohanu herberto Data 6 februarie 2017 13:24:08
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
using namespace std;
#define MAXN 5001
#define MAXG 10001

int g[MAXN], p[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("rucsac.in", "r");
  FILE*fout=fopen("rucsac.out", "w");
  int n, gtot, i, j, max;
  fscanf(fin, "%d%d", &n, &gtot);
  for(i=1; i<=n; i++)
    fscanf(fin, "%d%d", &g[i], &p[i]);
  max=0;
  for(i=1; i<=n; i++){
    for(j=0; j<=gtot; j++){
      d[1][j]=d[0][j];
      if(g[i]<=j)
        if(d[0][j-g[i]]+p[i]>d[1][j])
          d[1][j]=d[0][j-g[i]]+p[i];
      if(d[1][j]>max)
        max=d[1][j];
    }
    for(j=0; j<=gtot; j++){
      d[0][j]=d[1][j];
      d[1][j]=0;
    }
  }

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