Pagini recente » Cod sursa (job #2064026) | Cod sursa (job #208555) | Cod sursa (job #1712622) | Cod sursa (job #2549142) | Cod sursa (job #968489)
Cod sursa(job #968489)
#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 cc=0;
fscanf(fin, "%ld%ld", &b, &cc);
for (x=1;x<=b;x++)
{
fscanf(fin, "%d%d", &w[x].aa, &w[x].bb);
xx+=w[x].aa;
cc+=w[x].bb;
}
if (xx<cc)
{
fprintf(fout, "-1");
exit(rez);
fclose(fin);
fclose(fout);
}
else
if (xx==cc)
{
fprintf(fout, "%ld", cc);
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);
}