Cod sursa(job #654834)

Utilizator vendettaSalajan Razvan vendetta Data 30 decembrie 2011 23:38:20
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#define nmax 5010
#define gmax 10010

using namespace std;

int dp[3][gmax], w[nmax], p[nmax];
int n, G;

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

void citeste(){

    f>>n>>G;
    for(int i=1; i<=n; ++i){
        f>>w[i]>>p[i];
    }

}

int  maxim(int x, int y){

    if ( x > y ) return x;
    return y;

}

void rezolva(){

    int r;

    for(int i=1; i<=n; ++i){
        if ( i % 2 == 0) r = 1;
            else r = 0;
        for(int j=0; j<=G; ++j){
            dp[1-r][j] = dp[r][j];
            if (w[i] <= j)
                dp[1-r][j] = maxim(dp[1-r][j], dp[r][ j-w[i] ] + p[i]);
        }
    }

}

void scrie(){
/*
    if ( n % 2==0) g<<dp[1][G];
    else g<<dp[0][G];
*/
    g<<dp[0][G];
}

int main(){

    citeste();
    rezolva();
    scrie();

    f.close();
    g.close();

    return 0;

}