Cod sursa(job #2100585)

Utilizator eduardandrei20Nechifor Eduard Andrei eduardandrei20 Data 5 ianuarie 2018 20:58:10
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <fstream>
#define INF 99999
using namespace std;
ifstream in("energii.in");
ofstream out("energii.out");

int g , energii[1010] , cost [ 1010] , W;
int a[2][5020];


int main()
{

in >> g >> W ;
       for ( int i =1 ; i <= g ; ++ i )
       {
           in >> energii[i]>>cost[i];
       }
 int lin = 0 ;
   // sunt pe linia 0 si o tot schimb !!!!!!

       int f = 1 ;
       // iau primul obiect si imi fac ok linia 1
         for ( int i = 1 ; i<=W ; ++ i )
         {
             if ( energii[f] >=i ) a[lin][i] = cost[f]; // ori pot sa l pornesc cu costul c
             else a[lin][i] = INF; // ori nu am cum efectivv
         }

         for ( int i = 2; i <= g ; ++ i )
         {
              lin = 1-lin ;
                 for ( int en = 1 ; en <= W ; ++ en )
                 { //cout << en <<" " ;
                     // pot porni cu asta curent ?
                        if ( energii[i]>=en) a[lin][en] = min(cost[i], a[1-lin][en]);
                           else
                           {
                               // daca nu mere pornit asa simplu
                               a[lin][en] = min (a[1-lin][en] , cost[i] + a[1-lin][en-energii[i]]);
                           }
                 }
         }
if (a[lin][W]!=INF){
out << a[lin][W];
return 0;}
out << -1 ;

    return 0;
}