Pagini recente » Cod sursa (job #3129511) | Cod sursa (job #2067715) | Cod sursa (job #2738399) | Cod sursa (job #2466654) | Cod sursa (job #968485)
Cod sursa(job #968485)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMAX 1005
#define newtype void
#define comb 5894759
#define rez 0
FILE *fin=fopen("energii.in", "r");
FILE *fout=fopen("energii.out", "w");
long v[10011000], x, a, b, c, xx;
struct structura
{
int aa, bb;
};
structura w[NMAX];
newtype read()
{
long c=0;
fscanf(fin, "%ld%ld", &b, &c);
for (x=1;x<=b;x++)
{
fscanf(fin, "%d%d", &w[x].aa, &w[x].bb);
xx+=w[x].aa;
c+=w[x].bb;
}
if (xx<c)
{
fprintf(fout, "-1");
exit(rez);
fclose(fin);
fclose(fout);
}
else
if (xx==c)
{
fprintf(fout, "%ld", c);
exit(rez);
fclose(fin);
fclose(fout);
}
memset(v, comb, 10010500);
}
newtype valoare()
{
for (x=1;x<=b;x++)
{
for (a=c;a>=0;a--)
if (v[a]!=comb&&v[a+w[x].aa]>v[a]+w[x].bb)
v[a+w[x].aa]=v[a]+w[x].bb;
if (v[w[x].aa]>w[x].bb)
v[w[x].aa]=w[x].bb;
}
}
newtype solve()
{
long cel=comb;
for (x=c;x<=xx;x++)
if (v[x]<cel)
cel=v[x];
fprintf(fout, "%ld", cel);
}
int main()
{
read();
valoare();
solve();
fclose(fin);
fclose(fout);
return (rez);
}