Cod sursa(job #1818541)

Utilizator vladdexaVlad Dexamir vladdexa Data 29 noiembrie 2016 13:41:17
Problema Problema rucsacului Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#define nmax 10001
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
int n,G;
int P;
int c[nmax][nmax];
struct obiect
{
    int g;
    int p;
};
  obiect a[nmax];
 void Citire()
 {
     fin>>n>>G;
     int i;
     for(i=1;i<=n;i++)
        fin>>a[i].g>>a[i].p;
 }
 void Dinamica()
 {
     int i,j;
     for(i=0;i<=G;i++)
        c[0][i]=0;
     for(j=1;j<=n;j++)
        c[j][0]=0;
     for(i=1;i<=n;i++)
        for(j=1;j<=G;j++)
        if(a[i].g>j) c[i][j]=c[i-1][j];
     else c[i][j]=max(c[i-1][j],a[i].p+c[i-1][j-a[i].g]);

 }
 void Solutie()
 {
     int x,y;
     x=n;
     y=G;
     while(c[x][y]!=0)

         if(c[x][y]!=c[x-1][y]) {P=P+a[x].p;
                                 y=y-a[x].g;
                                 x--;}
         else x--;

     fout<<P;
 }
int main()
{ Citire();
  Dinamica();

  Solutie();
    return 0;
}