Cod sursa(job #550936)

Utilizator shnakoVlad Schnakovszki shnako Data 10 martie 2011 09:42:43
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FARA_NUMAR 1005
#define MARE 5894759
#define LANTZ_DA_HAUR_MERITA_SHMEKERU 0
FILE *teancu_da_lei_vechi=fopen("energii.in", "r"), *teancu_da_euroi=fopen("energii.out", "w");
long sum[10011000], i, j, n, k, s;

typedef struct am_valoare_si_bishtari
{
	int e, c;
};

am_valoare_si_bishtari v[FARA_NUMAR];

void da_valoare_la_jupan()
{
	long c=0;
	fscanf(teancu_da_lei_vechi, "%ld%ld", &n, &k);
	for (i=1;i<=n;i++)
	{
		fscanf(teancu_da_lei_vechi, "%d%d", &v[i].e, &v[i].c);
		s+=v[i].e;
		c+=v[i].c;
	}
	if (s<k)
	{
		fprintf(teancu_da_euroi, "-1");
		exit(LANTZ_DA_HAUR_MERITA_SHMEKERU);
		fclose(teancu_da_lei_vechi);
		fclose(teancu_da_euroi);
	}
	else
		if (s==k)
		{
			fprintf(teancu_da_euroi, "%ld", c);
			exit(LANTZ_DA_HAUR_MERITA_SHMEKERU);
			fclose(teancu_da_lei_vechi);
			fclose(teancu_da_euroi);
		}
	memset(sum, MARE, 10010500);
}

void dau_bishtari_la_lautari()
{
	for (i=1;i<=n;i++)
	{
		for (j=k;j>=0;j--)
			if (sum[j]!=MARE&&sum[j+v[i].e]>sum[j]+v[i].c)
				sum[j+v[i].e]=sum[j]+v[i].c;
			if (sum[v[i].e]>v[i].c)
				sum[v[i].e]=v[i].c;
	}
}

void mor_dusmanii_cand_scot_banu()
{
	long cel_mai_shukar_puradel=MARE;
	for (i=k;i<=s;i++)
		if (sum[i]<cel_mai_shukar_puradel)
			cel_mai_shukar_puradel=sum[i];
	fprintf(teancu_da_euroi, "%ld", cel_mai_shukar_puradel);
}

int main()
{
	da_valoare_la_jupan();
	dau_bishtari_la_lautari();
	mor_dusmanii_cand_scot_banu();
	fclose(teancu_da_lei_vechi);
	fclose(teancu_da_euroi);
	return (LANTZ_DA_HAUR_MERITA_SHMEKERU);
}