Submission
Status:
PPPPPPPPPP
Score: 100
User: pxsit
Problemset: ประลอง
Language: cpp
Time: 0.001 second
Submitted On: 2024-11-14 21:22:08
#include <stdio.h>
#include <stdlib.h>
int minDiff = 1000000;
int bestSet1[100], bestSet2[100];
int bestSize1, bestSize2;
void findBestSplit(int arr[], int n, int currentIndex, int set1[], int set2[], int size1, int size2, int sum1, int sum2) {
if (currentIndex == n) {
if ((size1 == n / 2 && size2 == n / 2) || (size1 == n / 2 + 1 && size2 == n / 2)) {
int diff = abs(sum1 - sum2);
if (diff < minDiff) {
minDiff = diff;
// Store the best configuration
bestSize1 = size1;
bestSize2 = size2;
for (int i = 0; i < size1; i++)
bestSet1[i] = set1[i];
for (int i = 0; i < size2; i++)
bestSet2[i] = set2[i];
}
}
return;
}
if (size1 < n / 2 + 1) {
set1[size1] = arr[currentIndex];
findBestSplit(arr, n, currentIndex + 1, set1, set2, size1 + 1, size2, sum1 + arr[currentIndex], sum2);
}
if (size2 < n / 2) {
set2[size2] = arr[currentIndex];
findBestSplit(arr, n, currentIndex + 1, set1, set2, size1, size2 + 1, sum1, sum2 + arr[currentIndex]);
}
}
int main() {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]);
int set1[n], set2[n];
findBestSplit(arr, n, 0, set1, set2, 0, 0, 0, 0);
// Print only the best configuration
for (int i = 0; i < bestSize2; i++) {
printf("%d", bestSet2[i]);
if (i < bestSize2 - 1) printf(" ");
}
printf("\n");
for (int i = 0; i < bestSize1; i++) {
printf("%d", bestSet1[i]);
if (i < bestSize1 - 1) printf(" ");
}
return 0;
}