Pagini recente » Cod sursa (job #1351107) | Cod sursa (job #3292183) | Cod sursa (job #2388130) | Cod sursa (job #3160196) | Cod sursa (job #342759)
Cod sursa(job #342759)
#include <stdio.h>
#include <algorithm>
#include <vector>
#define MAXN 4000000
using namespace std;
struct generator
{
int c;
int e;
};
int best[MAXN];
bool viz[MAXN];
vector<generator> gn;
bool cmpf(const generator v1,const generator v2)
{
return v1.e > v2.e;
}
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
int nrg,cmin,i,j,min = 99999999;
generator aux;
aux.e = 9999999;
aux.c = 1;
gn.push_back(aux);
scanf("%d",&nrg);
scanf("%d",&cmin);
for (i=1;i<=nrg;i++)
{
scanf("%d%d",&aux.e,&aux.c);
gn.push_back(aux);
}
sort(gn.begin(),gn.end(),cmpf);
best[0] = 0;
for (i=1;i<=nrg;i++)
{
if (best[gn[i].c]<gn[i].e)
{
best[gn[i].c] = gn[i].e;
viz[gn[i].c] = true;
if (best[gn[i].c]>=cmin)
{
if (gn[i].c<min)
{
min = gn[i].c;
}
}
}
for (j=1;j<=cmin;j++)
{
if (viz[j])
{
viz[j] = false;
}
else if (best[j] != 0)
{
if (best[j+gn[i].c] < best[j]+gn[i].e)
{
best[j+gn[i].c] = best[j] + gn[i].e;
viz[j+gn[i].c] = true;
}
if (best[j] + gn[i].e>=cmin)
{
if (j+gn[i].c<min)
{
min = j+gn[i].c;
}
break;
}
}
}
}
if (min != 99999999)
{
printf("%d",min);
}
else
{
printf("-1");
}
return 0;
}