Cod sursa(job #1752737)

Utilizator ducu34Albastroiu Radu Gabriel ducu34 Data 4 septembrie 2016 23:53:17
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.1 kb
//
//  main.cpp
//  Energii
//
//  Created by Albastroiu Radu on 9/4/16.
//  Copyright © 2016 Albastroiu Radu. All rights reserved.
//

#include <iostream>
#include <fstream>
#include <algorithm>
#include <unordered_map>
#include <vector>
#define MULTFOARTEMULT (1<<30)-1
using namespace std;

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

int i,j,nr_of_gen, min_power, power, cost, cost_total[10001], Min_cost;
// first power, second cost;
vector<int> points;
unordered_map<int,int> cost_for_power;

int main()
{
    fin>>nr_of_gen>>min_power;
    
    for(i=1;i<=nr_of_gen;i++)
    {
        fin>>power>>cost;
        
        for(auto &element:points)
        {
            if(element<min_power)
            {
                if(cost_total[element+power])
                {
                    if(cost_total[element+power] > cost_for_power[element]+cost)
                    {
                        int x = cost_for_power[element]+cost;
                        
                        cost_for_power[element+power] = x;
                        cost_total[element+power] = x;
                    }
                }
                else
                {
                    int x = cost_for_power[element]+cost;
                    
                    cost_for_power[element+power] = x;
                    cost_total[element+power] = x;
                    
                    points.push_back(element+power);
                }
            }
        }
        
        if(cost_total[power])
        {
            if(cost_total[power] > cost)
            {
                cost_for_power[power] = cost;
                cost_total[power] = cost;
            }
        }
        else
        {
            cost_for_power[power] = cost;
            cost_total[power] = cost;
            points.push_back(power);
        }

    }
    
    Min_cost = MULTFOARTEMULT-1;
    
    for(i=min_power;i<=10000;i++)
    {
        if(cost_total[i])
        {
            Min_cost = min(Min_cost, cost_total[i]);
        }
    }
    
    if(Min_cost!=MULTFOARTEMULT-1)
        fout<<Min_cost;
    else
        fout<<-1;
    
    return 0;
}