Pagini recente » Cod sursa (job #367679) | Cod sursa (job #259381) | Cod sursa (job #2041553) | Cod sursa (job #555385) | Cod sursa (job #381362)
Cod sursa(job #381362)
#include <stdio.h>
#include <stdlib.h>
#define MARE 5898487
FILE *f=fopen("energii.in", "r"), *g=fopen("energii.out", "w");
long sum[1001100], e[1005], c[1005], i, gen, need, j, s;
void citeste(void)
{
fscanf(f, "%ld%ld", &gen, &need);
for (i=1;i<=gen;i++)
fscanf(f, "%ld%ld", &e[i], &c[i]);
fclose(f);
}
void sume(void)
{
for (i=1;i<=gen;i++)
s+=e[i];
if (s<need)
{
fprintf(g, "-1");
exit(0);
}
for (i=1;i<=s;i++)
sum[i]=MARE;
s=0;
for (i=1;i<=gen;i++)
{
for (j=s;j>=0;j--)
if (sum[j]!=MARE&&c[i]+sum[j]<sum[e[i]+j])
sum[e[i]+j]=sum[j]+c[i];
if (sum[e[i]]>c[i])
sum[e[i]]=c[i];
s+=e[i];
}
}
void gaseste(void)
{
long min=MARE;
for (i=need;i<=s;i++)
if (sum[i]<min)
min=sum[i];
fprintf(g, "%ld", min);
fclose(g);
}
int main(void)
{
citeste();
sume();
gaseste();
}