Cod sursa(job #2859629)

Utilizator Kawaiimeatball13Russu Mihaela Kawaiimeatball13 Data 1 martie 2022 17:48:13
Problema Ghiozdan Scor 36
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");

int n, g;
int greutati[20001];
int dp[75001];
int nr_obiecte[75001];

bool comp(int a, int b)
{
    if(a > b)
        return true;
    return false;
}

void citire()
{
    fin >> n >> g;
    for(int i = 0; i < n; ++i)
        fin >> greutati[i];
}

void rezolvare()
{
    for(int i = 1; i <= n; ++i)
        for(int j = g; j > 0 && j - greutati[i] >= 0; --j)
        {
            if(dp[j] < dp[j - greutati[i]] + greutati[i])
            {
                dp[j] = dp[j - greutati[i]] + greutati[i];
                nr_obiecte[j] = nr_obiecte[j - greutati[i]] + 1;
                //cout << i << ' ' << j << ' ' << greutati<<  '\n';
            }
            else if(dp[j] == dp[j - greutati[i]] + greutati[i] && nr_obiecte[j] > nr_obiecte[j - greutati[i]])
            {
                dp[j] = dp[j - greutati[i]] + greutati[i];
                nr_obiecte[j] = nr_obiecte[j - greutati[i]] + 1;
            }
        }

    fout << dp[g] << ' ' << nr_obiecte[g];
}

int main()
{
    citire();
    //sort(greutati + 1, greutati + n + 1, comp);
//    for(int i = 0; i < n; ++i)
//        cout << greutati[i] << ' ';
    rezolvare();
    return 0;
}