Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/robybrasov | Cod sursa (job #1434056) | Cod sursa (job #2054345) | Cod sursa (job #95056)
Cod sursa(job #95056)
#include <fstream>
#include <iostream>
using namespace std;
const int maxsize = 10011001;
int ee[1001];
int cg[1001];
int a[maxsize];
int pozitii[1001];
int predecesor[1001];
bool notInPart(int v, int k)
{
int l = v;
while(l>0)
{
if(k == pozitii[l])
return false;
l = predecesor[l];
}
return true;
}
int main(void)
{
ifstream in;
ofstream out;
in.open("energii.in");
out.open("energii.out");
int g;
int w;
in >> g;
in >> w;
int count = 0;
int i=0;
for(;i<g;++i)
{
int ee1, cg1;
in >> ee1 >> cg1;
ee[i] = ee1;
cg[i] = cg1;
}
in.close();
bool found = false;
a[0] = 0;
i = 1;
for(;i<maxsize;++i)
{
int m = 0;
int poz = -1;
int pred = 0;
for(int k=0;k<g;++k)
{
if(cg[k] <= i && notInPart(i-cg[k], k))
{
if(ee[k] + a[i-cg[k]] > m)
{
m = ee[k] + a[i-cg[k]];
poz = k;
pred = i-cg[k];
}
}
}
a[i] = m;
pozitii[i] = poz;
predecesor[i] = pred;
if(a[i] >= w)
{
found = true;
break;
}
}
if(found)
out << i << endl;
else
out << "-1" << endl;
out.close();
return 0;
}