Cod sursa(job #1193296)

Utilizator borcanirobertBorcani Robert borcanirobert Data 31 mai 2014 13:52:00
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;

FILE *f = fopen( "rucsac.in", "r" );
FILE *g = fopen( "rucsac.out", "w" );

const int MAX = 5000;
struct DepPro{
    int a, p;
};
DepPro a[MAX];
int ok[MAX], p[MAX];
int n, s;

bool Comp( const DepPro& a1, const DepPro& a2 )
{
    if ( a1.p > a2.p || ( a1.p == a2.p && a1.a < a2.a ) )
        return true;
    return false;
}
void Rucsac();

int main()
{
    int i, j;

    fscanf( f, "%d%d", &n, &s );
    for ( i = 1; i <= n; i++ )
        fscanf( f, "%d%d", &a[i].a, &a[i].p );

    Rucsac();

    fclose(f);
    fclose(g);
    return 0;
}

void Rucsac()
{
    int i, j;
    ok[0] = 1; p[0] = 0;
    sort( a + 1, a + 1 + n, Comp );

    for ( i = 1; i <= n; i++ )
        for ( j = s - a[i].a; j >= 0; j-- )
            if ( ok[j] && p[j + a[i].a] < p[j] + a[i].p )
            {
                ok[j + a[i].a] = 1;
                p[j + a[i].a] = p[j] + a[i].p;
            }

    fprintf( g, "%d\n", p[s] );
}