Pagini recente » Cod sursa (job #2876767) | Cod sursa (job #2878028) | Cod sursa (job #2927687) | Cod sursa (job #3038333) | Cod sursa (job #841922)
Cod sursa(job #841922)
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
int cost = -1;
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 || cost == -1) && 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);
fprintf(out, "%d", cost);
fclose(in);
fclose(out);
}
return 0;
}