Pagini recente » Cod sursa (job #65185) | Cod sursa (job #484109) | Cod sursa (job #1161721) | Cod sursa (job #2707240) | Cod sursa (job #578382)
Cod sursa(job #578382)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct pct{long x; long y;} a[10001];
long n, w, b[10001], d[10001], i, j, min = 99999;
int compare(const void *a, const void *b)
{
pct x = *(pct*)a;
pct y = *(pct*)b;
if (x.y < y.y) return -1;
else if (x.y > y.y) return 1;
return 0;
}
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
scanf("%ld", &n);
scanf("%ld", &w);
for (i = 1; i <= n; i ++)
scanf("%ld %ld", &a[i].x, &a[i].y);
qsort(a, n, sizeof(pct), compare);
memset(b + 1, -1, sizeof(b));
for (i = 1; i <= n; i ++)
for (j = 0; j + a[i].x <= w * 2; j ++)
if (b[j] < i && b[j + a[i].x] == -1 && b[j] != -1)
{
b[j + a[i].x] = i;
d[j + a[i].x] = d[j] + a[i].y;
}
// else if (b[j] < i && d[j + a[i].x] > d[b[j]] + a[i].y)
// {
// d[j + a[i].x] = d[b[j]] + a[i].y;
// }
j = w;
for (j = w; j <= w * 2; j ++)
if (d[j] < min && d[j] != 0)
min = d[j];
printf("%ld\n", min);
return 0;
}