Cod sursa(job #1860736)
Utilizator | Data | 28 ianuarie 2017 12:43:58 | |
---|---|---|---|
Problema | Energii | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.08 kb |
#include <cstdio>
using namespace std;
const int inf = 1.e9;
int d[5005];
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
int n,i,enmin,en,cost,rezolv=inf,j,last=0;
scanf("%d%d",&n,&enmin);
for(i=1;i<=enmin;i++)
d[i]=inf;
d[0]=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&en,&cost);
for(j=last;j>=0;j--)
{
if(d[j]!=inf)
{
if(j+en>=enmin)
{
if(d[j]+cost<rezolv)
{
rezolv=d[j]+cost;
}
}
else if(d[j+en]>d[j]+cost)
{
d[j+en]=d[j]+cost;
if(j+en>=enmin&&d[j+en]<rezolv)
rezolv=d[j+en];
else if(j+en<enmin)
last=j+en;
}
}
}
}
if(rezolv==inf)
{
printf("-1");
return 0;
}
printf("%d",rezolv);
return 0;
}