Cod sursa(job #1870426)

Utilizator miha1000Dica Mihai miha1000 Data 6 februarie 2017 17:18:36
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#define nmax 5005

using namespace std;



int n,w[10005],pmax,i,weight,j;
int a[3][10005];
int p[5005];
ifstream f("rucsac.in");
ofstream g("rucsac.out");

/*void sub(int k){
    int i,cost,profit;
    if (k>n){
        cost=0;
        profit=0;
        for(i=1;i<=n;i++){
            if (v[i]==1) {
                cost=cost+per[i].first;
                profit=profit+per[i].second;
            }
            if (cost<=w && profit > pmax) pmax=profit;
        }
        return;
    }
    v[k]=1;
    sub(k+1);
    v[k]=0;
    sub(k+1);
}*/

int main()
{
    int act,last;
    f >> n >> weight;
    for(j=1;j<=weight;j++) a[0][j]=-1;
    for(i=1;i<=n;i++){
        f >> w[i] >> p[i];
    }
    for(i=1;i<=n;i++){
            act=i&1;
            last=act^1;
        for(j=1;j<=weight;j++){
            a[act][j]=a[last][j];
            if (j-w[i]>=0 && a[last][j-w[i]]!=-1)
            a[act][j]=max(a[act][j],a[last][j-w[i]]+p[i]);
        }
    }
    pmax=0;
    for(i=1;i<=weight;i++){
        if (a[act][i]>pmax) pmax=a[act][i];
    }
    g << pmax;
}