Pagini recente » Cod sursa (job #1947277) | Cod sursa (job #813735) | Cod sursa (job #1215641) | Cod sursa (job #1383993) | Cod sursa (job #2100585)
#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;
}