Pagini recente » Cod sursa (job #1874449) | Statistici Darie Flavius (Darie.Flavius) | Istoria paginii utilizator/dinud | Profil Tavise | Cod sursa (job #381640)
Cod sursa(job #381640)
#include <stdio.h>
#include <stdlib.h>
#define MARE 5898487
FILE *f=fopen("energii.in", "r"), *g=fopen("energii.out", "w");
long sum[10011000], e[1005], c[1005], i, gen, need, j, s, inj, sw;
void shellsort(void)
{
inj=gen;
while(inj>1)
{
inj/=2;
do{
sw=0;
for( i=1;i<=gen-inj;i++)
if(sum[i]>sum[i+inj])
{
sum[i]=sum[i]^sum[i+inj];
sum[i+inj]=sum[i]^sum[i+inj];
sum[i]=sum[i]^sum[i+inj];
sw++;
}
}while(sw!=0);
}
}
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)
{
shellsort();
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();
}