Cod sursa(job #1012990)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 20 octombrie 2013 00:27:57
Problema Problema rucsacului Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
#include <algorithm>

using namespace std;
const int Gmax = 10005;
int DP[ 2 ][ Gmax ],N,G,g;

void read(){
    scanf("%d%d",&N,&G);
}
void initial(){
    int w,p;
    scanf("%d%d",&w,&p);
    DP[0][w] = p; // asta e optima
    g = w;
}

void solve(){

    int i,j,w,p,sol = -1;
    for( i = 1 ; i < N  ; ++ i){
        scanf("%d%d",&w,&p);
        DP[i&1][w] = max (DP[!(i&1)][w] , p);
        for(j = 0; j <= g; ++j){

            DP[i&1][j] = max ( DP[!(i&1)][j] , DP[i&1][j]); // mostenim

            if( DP[ !(i&1) ][j] && j+w <= G){

                DP[i&1][j + w] = max( DP[!(i&1)][j] + p , DP[i&1][j+w]);
                g = max(g , j + w);
                sol = max ( sol , DP[i&1][j+w]);
            }
        }
    }
    printf("%d",sol);
}

int main()
{
    freopen("rucsac.in","r",stdin);
    freopen("rucsac.out","w",stdout);

    read();
    initial();
    solve();

    return 0;
}