Cod sursa(job #2116046)

Utilizator MarcelVargaMarcel Varga MarcelVarga Data 27 ianuarie 2018 12:04:29
Problema Problema rucsacului Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>

using namespace std;
ifstream fi("rucsac.in");
ofstream fo("rucsac.out");
int gr[5001],profit[5001],dp[5001][10001];
int n,g;
void af1(){for(int i=1;i<=n;i++) fo<<gr[i]<<" "<<profit[i]<<'\n';fo<<'\n';}
void af2(){for(int i=1;i<=n;i++){ for(int j=0;j<=g;j++) fo<<dp[i][j]<<" "; fo<<'\n';}}
int main()
{   fi>>n>>g;
    for(int i=1;i<=n;i++) fi>>gr[i]>>profit[i];
    //af1();
   // for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) if(profit[i]>profit[j]) {swap(gr[i],gr[j]);swap(profit[i],profit[j]);}
   // for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) if(gr[i]>gr[j]) {swap(gr[i],gr[j]);swap(profit[i],profit[j]);}
    for(int i=1;i<=n;i++) for(int j=1;j<=g;j++){
            if(j<gr[i]) dp[i][j]=dp[i-1][j];
            if(j>=gr[i]) dp[i][j]=max(dp[i-1][j],profit[i]+dp[i-1][j-gr[i]]);
    }
    //af1();
    //af2();
    fo<<dp[n][g];
    return 0;
}