Cod sursa(job #1097245)

Utilizator casuneanu.andreiCasuneanu Andrei Dan casuneanu.andrei Data 3 februarie 2014 11:27:43
Problema Problema rucsacului Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.74 kb
#include <fstream>
#define IN "rucsac.in"
#define OUT "rucsac.out"
#define DMAX 5008
using namespace std;

ifstream fin(IN);
ofstream fout(OUT);

int gmax, n;
int g[DMAX], p[DMAX], pmax[2][DMAX];

void citire();
void showtime();

int main()
{
    citire();
    showtime();
    return 0;
}

void showtime()
{
    int G, i;

    for (G=1; G<=gmax; G++)
        if (g[1]<=G) pmax[0][G]=p[1];
    int l=1;

    for (i=2; i<=n; i++)
    {
        for (G=1; G<=gmax; G++)
        {
            pmax[l][G]=pmax[1-l][G];
            if (g[i]<=G && pmax[l][G]<p[i]+pmax[1-l][G-g[i]]) pmax[l][G]=p[i]+pmax[1-l][G-g[i]];
        }
        l=1-l;
    }

    fout <<pmax[1-l][gmax]<<'\n';
}

void citire()
{
    fin >>n>>gmax;

    int i;
    for (i=1; i<=n; i++)
        fin >>g[i]>>p[i];
}

/*
#include <fstream>
#define DMAX 10010
#define NMAX 5010
using namespace std;
ifstream fin ("rucsac.in");
ofstream fout ("rucsac.out");

void citire();
void pd();
void afisare();

int n, G;
int profit[DMAX];
int g[NMAX], p[NMAX];

int main()
{
    citire();
    pd();
    afisare();

    fin.close();
    fout.close();
    return 0;
}

void citire()
{
    int i;
    fin>> n>> G;
    for (i=1; i<=n; i++)
         fin>> g[i]>> p[i];
}

void pd()
{
    int i, j;
    for(i=1; i<=G; i++)
        profit[i] = -1;

    profit[0] = 0;
    for (i=1; i<=n; i++)
         for (j=G-g[i]; j>=0 ; j--)
              if (profit[j]!=-1 && profit[j]+p[i] > profit[j+g[i]])
                  profit[j+g[i]] = profit[j] + p[i];
}

void afisare()
{
    int i, maxim;

    maxim=profit[1];
    for (i=2; i<=G; i++)
         if (profit[i]>maxim)
             maxim=profit[i];
    fout<< maxim<< "\n";
}
*/