Pagini recente » Cod sursa (job #1669483) | Cod sursa (job #1244696) | Cod sursa (job #2576868) | Cod sursa (job #1283416) | Cod sursa (job #2576898)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void subsetSums(FILE* aux ,int arr[], int l, int r,
int sum = 0)
{
if (l > r)
{
fprintf(aux,"%d ", sum);
return;
}
subsetSums(aux ,arr, l + 1, r, sum + arr[l]);
subsetSums(aux,arr, l + 1, r, sum);
}
int main()
{
FILE* in = fopen("energii.in", "r");
if(in==NULL)
{
printf("Eroare la formarea fisierului de intrare!");
return 1;
}
FILE* out = fopen("energii.out", "w");
FILE* aux1 = fopen("aux1.txt", "w");
int n, cost;
fscanf(in, "%d\n%d", &n,&cost);
int* costuri = (int*)malloc(sizeof(int) * n);
int* e = (int*)malloc(sizeof(int) * n);
for(int i=0;i<n;i++)
fscanf(in, "%d %d", &e[i],&costuri[i]);
subsetSums(aux1,costuri, 0, n - 1);
//printf("\n\n");
subsetSums(aux1,e, 0, n - 1);
fclose(aux1);
FILE* aux2 = fopen("aux1.txt", "r");
int N = pow(2, n);
int** mat = (int**)malloc(sizeof(int*)*2);
mat[0] = (int*)malloc(sizeof(int) * N);
mat[1] = (int*)malloc(sizeof(int) * N);
for (int i = 0;i < 2;i++)
for (int j = 0;j < N;j++)
fscanf(aux2, "%d", &mat[i][j]);//pe prima linie o sa am costurile
int t = 0,min,mini;
for (int i = 0;i < N;i++)
if ((mat[0][i] >= cost) && (t == 0))
{
min = mat[1][i];
mini = i;
t = 1;
}
else if ((mat[0][i] >= cost) && (min > mat[1][i]))
{
min = mat[1][i];
mini = i;
}
if (t != 0)
fprintf(out, "%d", mat[0][mini]);
else fprintf(out, "-1");
}