Cod sursa(job #698922)

Utilizator NistorSergiuNistor Sergiu NistorSergiu Data 29 februarie 2012 16:44:55
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<cstdio>
using namespace std;
short eprod[1001];
short cost[1001];
long costptprod[5001]; //acest sir retine pe pozitia i, costul pentru a obtine aceasta energie
int main()
{
	long n,i,w,j,l=0;
	long minim=-1;
	FILE* f;
	f=fopen("energii.in","r");
	fscanf(f,"%ld\n%ld",&n,&w);
	for(i=0;i<n;i++)
		fscanf(f,"%hd %hd\n",&eprod[i],&cost[i]);
	fclose(f);
	for(i=1;i<=w;i++)
		costptprod[i]=-1;
	costptprod[0]=0; //nu costa nimic pentru a produce 0 energie
	for(i=0;i<n;i++)
	{
		//l=1-l;
		for(j=w;j>=0;j--)
			if(costptprod[j]!=-1)  //daca costptprod[j]==-1, atunci inseamna ca nu exista nicio cale de a obtine aceasta cantitate de energie
			{                      //folosind primele (i-1) generatoare
				if(j+eprod[i]>w)
				{
					if((minim>(costptprod[j]+cost[i]))||(minim==-1))
						minim=costptprod[j]+cost[i];
				}
				else
				{
					if(j+eprod[i]<w)
					{
						if(costptprod[j+eprod[i]]>costptprod[j]+cost[i])
							costptprod[j+eprod[i]]=costptprod[j]+cost[i];
					}
					else
					{
						if((minim>(costptprod[j]+cost[i]))||(minim==-1))
							minim=costptprod[j]+cost[i];
						if(costptprod[j+eprod[i]]>costptprod[j]+cost[i])
							costptprod[j+eprod[i]]=costptprod[j]+cost[i];
					}
				}
			}
	}
	FILE* g;
	g=fopen("energii.out","w");
	fprintf(g,"%ld",minim);
	fclose(g);
	return 0;
}