Cod sursa(job #2319867)

Utilizator Dan201399Frimu Daniel Dan201399 Data 13 ianuarie 2019 22:34:17
Problema Problema rucsacului Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
using namespace std;

void insertionsort(int val[], int wt[], int n)
{
    for (int i = 1; i < n; i++)
    {
        int key = val[i], wkey = wt[i];
        int k = i - 1;
        while (k >= 0 && key < val[k])
        {
            val[k+1] = val[k]; wt[k+1] = wt[k];
            k--;
        }
        val[k+1] = key;
        wt[k+1] = wkey;
    }
}

int knapsack(int val[], int wt[], int n, int c)
{
    if (n == 0 || c == 0)
        return 0;
    if (wt[n-1] > c)
        return knapsack(val, wt, n-1, c);
    else return max(val[n-1] + knapsack(val, wt, n-1, c-wt[n-1]), knapsack(val, wt, n-1, c));

}

int main()
{
    ifstream f;
    f.open("rucsac.in");
    ofstream g;
    g.open("rucsac.out");
    int n, c;
    f >> n >> c;

    int val[5000], wt[5000];
    for (int i = 0; i < n; i++)
        f >> wt[i] >> val[i];


    insertionsort(val, wt, n);

    g << knapsack(val, wt, n, c);

    f.close();
    g.close();
    return 0;
}