Cod sursa(job #782712)

Utilizator vitaleamaldur vitalik vitalea Data 29 august 2012 12:26:54
Problema Problema rucsacului Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <vector>

#define MAX(a, b) a > b ? a : b

using namespace std;

int n, g;
vector< pair<int, int> > objects;

void function(vector<int> &line, int index, int * result)
{
    vector<int> newLine(g + 1, 0);
    for(int i = 1; i <= g; i++)
    {
        newLine[i] = line[i];
        int tmp = line[i - objects[index - 1].first] + objects[index - 1].second;
        if(line[i] < tmp && i - objects[index - 1].first >= 0)
            newLine[i] = tmp;
    }

    if(index == n)
         *result = newLine[g];
    else
        function(newLine, index + 1, result);
}

int main()
{
    ifstream in ("rucsac.in");
    ofstream out ("rucsac.out");
    int result;
    in >> n >> g;
    for(int i = 0; i < n; i++)
    {
        int og, ov;
        in >> og >> ov;
        objects.push_back(pair<int, int> (og, ov));
    }
    vector<int> line (g + 1, 0);
    function(line, 1, &result);
    out << result;
    in.close();
    out.close();
    return 0;
}