Cod sursa(job #3179303)

Utilizator RichardChessBibire David-Alexandru RichardChess Data 3 decembrie 2023 14:39:54
Problema Energii Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <iostream>
#include <vector>
using namespace std;
#include <fstream>
ifstream f("energii.in");
ofstream g("energii.out");

int main() {
    int G, W, c_min;
    f>>G;
    f>>W;
    int EG[G];
    int CG[G];
    for(int i = 0; i < G; i++){
        f>>EG[i];
        f>>CG[i];
    }

    // 10 5 - 15   ----> 3 posibilități                                                                                1

    // 4 3 9 - 7 16 - 13 12    ----> 7 posibilități                                                                    4

    // 5 3 6 12 - 8 11 17 - 9 15 - 18 - 14 20 - 21 - 26   ----> 14 posibilități                                       10
    // 5 3 6 12 - 8 11 17 14 20 26 - 9 15 21 - 18

    // 8 7 2 13 14 - 15 10 21 22 17 28 29 30 31 44 - 9 20 21 21 22 35 - 15 16 29 - 27    ----> 25 de posibilități     20



    vector<int> sum_e;
    vector<int> sum_c;

    int pos = 1 << G; // Numărul total de combinații posibile

    for (int i = 0; i < pos; i++) {
        int sum1 = 0;
        int sum2 = 0;
        vector<int> comb1; // combination vector 1
        vector<int> comb2; // combination vector 2
        for (int j = 0; j < G; j++) {
            if (i & (1 << j)) {
                sum1 += EG[j];
                sum2 += CG[j];
                comb1.push_back(EG[j]);
                comb2.push_back(CG[j]);
            }
        }
        sum_e.push_back(sum1);
        sum_c.push_back(sum2);
    }


    int aux1, aux2;
    int nr_val = sum_e.size();
    for(int i = 0; i < nr_val; i++){
        for(int j = i; j < nr_val-1; j++){
            if(sum_c[j+1] < sum_c[j]){
                aux1 = sum_c[j];
                sum_c[j] = sum_c[j+1];
                sum_c[j+1] = aux1;

                aux2 = sum_e[j];
                sum_e[j] = sum_e[j+1];
                sum_e[j+1] = aux2;
            }
        }
    }

    /*
    for(int i = 0; i < nr_val; i++){
        cout<<sum_e[i]<<" ";
    }
    cout<<endl;
    for(int i = 0; i < nr_val; i++){
        cout<<sum_c[i]<<" ";
    }
    */

    c_min = -1; // cost minim
    for(int i = 0; i < nr_val; i++){
        if(sum_e[i] >= W){
            c_min = sum_c[i];
            break;
        }
    }


    g<<c_min;


    return 0;
}