Pagini recente » Borderou de evaluare (job #383348) | Borderou de evaluare (job #2249419) | Borderou de evaluare (job #980333) | Borderou de evaluare (job #2137960) | Cod sursa (job #841905)
Cod sursa(job #841905)
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
int cost = INT_MAX;
void sortByEfficiency (int** generatoare, int size)
{
int i, j;
for (i = 0; i < size-1; i++)
{
for (j = i+1; j < size; j++)
{
if (generatoare[i][0] * generatoare[j][1] < generatoare[i][1] * generatoare[j][0])
{
int* aux;
aux = generatoare[i];
generatoare[i] = generatoare[j];
generatoare[j] = aux;
}
}
}
}
void greedy (int** generatoare, int n, int energy)
{
int i = 0, j = 0;
int sum = energy;
int cost1;
while (i < n && sum >= energy)
{
j = i;
sum = 0;
cost1 = 0;
while (sum < energy && j < n)
{
sum += generatoare[j][0];
cost1 += generatoare[j][1];
j++;
}
if (cost1 < cost && sum >= energy)
cost = cost1;
i++;
}
}
int main()
{
FILE *in;
FILE *out;
in = fopen("energii.in", "r");
out = fopen("energii.out", "w");
if (in != NULL && out != NULL)
{
int n; // nr generatoare
int e; // energie minima pornire
int i;
int** generatoare;
fscanf(in, "%d %d", &n, &e);
generatoare = (int**) malloc(n * sizeof(int*));
for (i = 0; i < n; i++)
{
generatoare[i] = (int*) malloc(2 * sizeof(int));
fscanf(in, "%d %d", &generatoare[i][0], &generatoare[i][1]);
}
sortByEfficiency(generatoare, n);
greedy(generatoare, n, e);
if (cost == INT_MAX)
cost = -1;
fprintf(out, "%d", cost);
fclose(in);
fclose(out);
}
return 0;
}