Cod sursa(job #1899664)

Utilizator felipeGFilipGherman felipeG Data 2 martie 2017 21:11:30
Problema Problema rucsacului Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
using namespace std;

ifstream f ("rucsac.in");
ofstream g ("rucsac.out");

int n, G, v1[ 10001 ], v2[ 10001 ];

struct cell
{
    int w, p;
}v[ 5001 ];

void read()
{
    int i = 0;

    f >> n >> G;

    for ( i = 1; i <= n; ++ i )
        f >> v[ i ].w >> v[ i ].p;

    for ( i = 1; i <= G; ++ i )
        if ( i >= v[ 1 ].w )
            v1[ i ] = v[ i ].p;
}

void solve()
{
    int i, j;

    for ( i = 2; i <= n; ++ i )
    {
        for ( j = 1; j <= G; ++ j )
        {
            if ( j >= v[ i ].w ) v2[ j ] = max( v1[ j ], v1[ j - v[ i ].w ] + v[ i ].p );
            else v2[ j ] = v1[ j ];
        }

        if ( i < n )
        {
            for ( j = 1; j <= G; ++ j )
            {
                v1[ j ] = v2[ j ];
                v2[ j ] = 0;
            }
        }
    }
}

int main()
{
    read();
    solve();

    g << v2[ G ];

    f.close();
    g.close();
    return 0;
}