Cod sursa(job #1295540)

Utilizator refugiatBoni Daniel Stefan refugiat Data 19 decembrie 2014 19:06:14
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    ifstream si;
    si.open("rucsac.in");
    ofstream so;
    so.open("rucsac.out");
    int n;
    int m;
    si>>m>>n;
    int o[m][2],j,k;
    int i,l;
    for(i=0;i<m;++i)
    {
        si>>o[i][0]>>o[i][1];
        j=i;
        k=o[i][0];
        l=o[i][1];
        while(j>0&&k<o[j-1][0])
        {
            o[j][0]=o[j-1][0];
            o[j][1]=o[j-1][1];
            --j;
        }
        o[j][0]=k;
        o[j][1]=l;
    }
    int pm[n+1];
    pm[0]=0;
    bool uz[n+1][m];
    for(i=0;i<=n;++i)
        for(j=0;j<m;++j)
            uz[i][j]=false;
    bool d;
    for(i=1;i<=n;++i)
    {
        pm[i]=0;
        d=false;
        for(j=0;j<m&&o[j][0]<=i;++j)
            if(pm[i]<pm[i-o[j][0]]+o[j][1]&&uz[i-o[j][0]][j]==false)
            {
                d=true;
                pm[i]=pm[i-o[j][0]]+o[j][1];
                for(k=0;k<m;++k)
                    uz[i][k]=uz[i-o[j][0]][k];
                uz[i][j]=true;
            }
        if(d==false)
        {
            pm[i]=pm[i-1];
            for(j=0;j<m;++j)
                uz[i][j]=uz[i-1][j];
        }
    }
    cout<<pm[n-1];
}