Pagini recente » Cod sursa (job #2638271) | Cod sursa (job #1232069) | Cod sursa (job #134807) | Cod sursa (job #2624333) | Cod sursa (job #93754)
Cod sursa(job #93754)
#include <stdio.h>
#include <stdlib.h>
short int vector[1002],cost[1002],energie[1002]; //vector se foloseste pentru generarea de solutii
short int G; //numarul de generatoare
short int W; //cantitatea de energie necesara repornirii centralei
int cost_minim=11000000,cost_curent=0,putere_curenta=0;
/*
inline void init(short k)
{
if (k == 0) vector[k]=-1;
else
vector[k]=vector[k-1];
}
*/
/*
void tipar(short int k)
{
for (int i=0;i<=k;i++)
printf("%d ",*(vector+i));
printf("%d %d",cost_curent,putere_curenta);
printf("\n");
}
*/
void bkt()
{
short int k=0;
vector[k]=-1;
while (k>-1)
{
if (vector[k] < G-1)
{
vector[k]++;
cost_curent=cost_curent-cost[vector[k]-1]+cost[vector[k]];
putere_curenta=putere_curenta-energie[vector[k]-1]+energie[vector[k]];
if (cost_curent < cost_minim)
{
if (putere_curenta >= W)
{
cost_minim=cost_curent;
}
else
{
k++;
vector[k]=vector[k-1];
cost_curent+=cost[vector[k]];
putere_curenta+=energie[vector[k]];
}
}
}
else
{
cost_curent-=cost[vector[k]];
putere_curenta-=energie[vector[k]];
k--;
}
}
}
int main()
{
FILE *in;
in=fopen("energii.in","r");
fscanf(in,"%hd",&G);
fscanf(in,"%hd",&W);
int i=0,j=0,aux;
//printf("%d %d",G,W);
for (;i<G;i++)
{
fscanf(in,"%hd %hd",&energie[i],&cost[i]);
//printf("%d %d ",energie[i],cost[i]);
}
// printf("\n");
fclose(in);
for (i=0;i<G-1;i++)
for (j=i+1;j<G;j++)
if (cost[i]>cost[j])
{
aux=cost[i];
cost[i]=cost[j];
cost[j]=aux;
aux=energie[i];
energie[i]=energie[j];
energie[j]=aux;
}
// for (i=0;i<G;i++)
// printf("%d %d\n",energie[i],cost[i]);
bkt();
in=fopen("energii.out","w");
if (cost_minim == 11000000) fprintf(in,"%d",-1);
else fprintf(in,"%d",cost_minim);
//inchiderea fisierelor si incheierea executiei
fclose(in);
return 0;
}