Pagini recente » Cod sursa (job #72753) | Cod sursa (job #1505307) | Cod sursa (job #1428433) | Cod sursa (job #2234717) | Cod sursa (job #58048)
Cod sursa(job #58048)
#include <stdio.h>
#include <memory.h>
#define NMAX 30000//00
long a[NMAX], b[NMAX];
long n, w;
long long min = 2000000000;
int main()
{
long k, i, j, c, e;
//int c1[NMAX*100], c2[NMAX*100];
freopen("energii.in", "r", stdin);
freopen("energii.out", "w", stdout);
min *= 2;
scanf("%ld %ld\n", &n, &w);
//a[0] = 1;
//b[0] = 1;
scanf("%ld %ld\n", &e, &c);
a[e] = b[e] = c;
//c1[0] = 0;
//c1[++c1[0]] = e;
for(k = 1; k < n; ++k)
{
scanf("%ld %ld\n", &e, &c);
//c2[0] = 0;
if((a[e] > c) || !a[e])
b[e] = c;
for(i = 1; i < NMAX; ++i)
{
if(a[i])
{
if(((i+e < NMAX) && (b[i + e] > a[i] + c)) || !b[i + e])
{
b[i + e] = a[i] + c;
//c2[++c2[0]] = c1[i] + e;
}
//c2[++c2[0]] = c1[i];
}
}
//c2[ ++c2[0] ] = e;
memcpy(a, b, sizeof(b));
//memcpy(c1, c2, sizeof(c2));
}
for(i = w; i < NMAX; ++i)
{
if(b[i] && min > b[i])
{
min = b[i];
}
}
if(min != 2000000000)
printf("%lld\n", min);
else
printf("-1\n");
fclose(stdin);
fclose(stdout);
return 0;
}