Pagini recente » Cod sursa (job #3032813) | Cod sursa (job #3275831) | Cod sursa (job #303654) | Cod sursa (job #1401615) | Cod sursa (job #699059)
Cod sursa(job #699059)
#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;
long minim=999999999;
FILE* f;
f=fopen("energii.in","r");
fscanf(f,"%ld\n%ld",&n,&w);
for(i=1;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=1;i<=n;++i)
{
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=costptprod[j]+cost[i];
}
if(j+eprod[i]<=w)
if((costptprod[j+eprod[i]]>costptprod[j]+cost[i])||(costptprod[i]==-1))
costptprod[j+eprod[i]]=costptprod[j]+cost[i];
}
}
FILE* g;
g=fopen("energii.out","w");
if((costptprod[w]==-1)&&(minim==999999999))
fprintf(g,"%ld",costptprod[w]);
else
{
if(minim<costptprod[w])
fprintf(g,"%ld",minim);
else
{
if(costptprod[w]!=-1)
fprintf(g,"%ld",costptprod[w]);
else
fprintf(g,"%ld",minim);
}
}
fclose(g);
return 0;
}