Cod sursa(job #1606886)

Utilizator alexmanoAlex Manolache alexmano Data 20 februarie 2016 17:29:18
Problema Problema rucsacului Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
using namespace std;
ifstream in("rucsac.in");
ofstream out("rucsac.out");
int dp[5001][10001];
int N,G;
int g[5001],val[5001];
int main(){
    in>>N>>G;
    for(int i=1;i<=N;i++) in>>g[i]>>val[i];
    for(int i=1;i<=N;i++){
        if(val[i]!=0){

            for(int j=1;j<=G;j++) dp[i][j]=dp[i-1][j];

            dp[i][ g[i] ] = max( dp[i][ g[i] ] , val[i]);
            for(int j=1;j<=G;j++){
                if( dp[i-1][j] != 0 && j+g[i] <= G){
                    dp[i][ j + g[i] ] = max( dp[i][ j + g[i] ] , dp[i-1][j] + val[i] );
                }
            }

        }
        /*out<<"0 ";
        for(int j=1;j<=G;j++){
            if(dp[i][j]) out<<dp[i][j]<<' ';
            else out<<'-'<<' ';
        }
        out<<'\n';*/
    }
    int ans=0;
    for(int j=1;j<=G;j++) ans=max(ans,dp[N][j]);
    out<<ans<<'\n';
    return 0;
}