// Author :: Gaurav Ahirwar
#include<bits/stdc++.h>
#define FOR(i,n) for(int i=(0);i<(n);i++)
#define INF INT_MAX
using namespace std;
void getdiff(int arr[], int seta[], int setb[], int fseta[], int fsetb[], int inda, int indb, int i, int suma, int sumb, int &diff) {
if(i < 0 && abs(suma - sumb) < diff) {
FOR(j,inda) fseta[j] = seta[j];
FOR(j,indb) fsetb[j] = setb[j];
fseta[inda] = -1;
fsetb[indb] = -1;
diff = abs(suma-sumb);
}
// static int x = 0; cout << "Iteration = " << ++x << " \n";
if(i < 0) return;
seta[inda] = arr[i];
getdiff(arr, seta, setb, fseta, fsetb, inda+1,indb, i-1, suma + arr[i], sumb, diff);
setb[indb] = arr[i];
getdiff(arr, seta, setb, fseta, fsetb, inda,indb+1, i-1, suma , sumb + arr[i], diff);
}
void topdown(int arr[], int n) {
int seta [n+1], setb [n+1], fseta [n+1], fsetb [n+1];
FOR(i,n) seta[i] = -1, setb[i] = -1;
int suma = 0, sumb = 0, indexa = 0, indexb = 0;
int diff = INF, array_index = n-1;
getdiff(arr, seta, setb, fseta, fsetb, indexa, indexb, array_index, suma, sumb, diff);
cout << "Set 1 => ";
for(int i = 0; i <= n && fseta[i] != -1; i++) cout << fseta[i] << " ";
cout << endl << "Set 2 => ";
for(int i = 0; i <= n && fsetb[i] != -1; i++) cout << fsetb[i] << " ";
cout << "\nDifference => " << diff << endl;
}
int main() {
int arr[] = {1,7,4,11};
int n = sizeof(arr)/sizeof(arr[0]);
topdown(arr, n);
return 0;
}
Ly8gQXV0aG9yIDo6IEdhdXJhdiBBaGlyd2FyCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SKGksbikgZm9yKGludCBpPSgwKTtpPChuKTtpKyspCiNkZWZpbmUgSU5GIElOVF9NQVgKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgZ2V0ZGlmZihpbnQgYXJyW10sIGludCBzZXRhW10sIGludCBzZXRiW10sIGludCBmc2V0YVtdLCBpbnQgZnNldGJbXSwgaW50IGluZGEsIGludCBpbmRiLCBpbnQgaSwgaW50IHN1bWEsIGludCBzdW1iLCBpbnQgJmRpZmYpIHsKCSAKCWlmKGkgPCAwICYmIGFicyhzdW1hIC0gc3VtYikgPCBkaWZmKSB7CgkJRk9SKGosaW5kYSkgZnNldGFbal0gPSBzZXRhW2pdOwoJCUZPUihqLGluZGIpIGZzZXRiW2pdID0gc2V0YltqXTsKCQlmc2V0YVtpbmRhXSA9IC0xOwoJCWZzZXRiW2luZGJdID0gLTE7CiAJCWRpZmYgPSBhYnMoc3VtYS1zdW1iKTsKCX0KCSAKLy8Jc3RhdGljIGludCB4ID0gMDsgY291dCA8PCAiSXRlcmF0aW9uID0gIiA8PCArK3ggPDwgIiBcbiI7CglpZihpIDwgMCkgcmV0dXJuOwoJIAoJc2V0YVtpbmRhXSA9IGFycltpXTsKCWdldGRpZmYoYXJyLCBzZXRhLCBzZXRiLCBmc2V0YSwgZnNldGIsIGluZGErMSxpbmRiLCBpLTEsIHN1bWEgKyBhcnJbaV0sIHN1bWIsIGRpZmYpOwoJc2V0YltpbmRiXSA9IGFycltpXTsKCWdldGRpZmYoYXJyLCBzZXRhLCBzZXRiLCBmc2V0YSwgZnNldGIsIGluZGEsaW5kYisxLCBpLTEsIHN1bWEgLCBzdW1iICsgYXJyW2ldLCBkaWZmKTsKfQoKdm9pZCB0b3Bkb3duKGludCBhcnJbXSwgaW50IG4pIHsKCQoJaW50IHNldGEgW24rMV0sIHNldGIgW24rMV0sIGZzZXRhIFtuKzFdLCBmc2V0YiBbbisxXTsKCUZPUihpLG4pIHNldGFbaV0gPSAtMSwgc2V0YltpXSA9IC0xOwoJaW50IHN1bWEgPSAwLCBzdW1iID0gMCwgaW5kZXhhID0gMCwgaW5kZXhiID0gMDsKCWludCBkaWZmID0gSU5GLCBhcnJheV9pbmRleCA9IG4tMTsKCQoJZ2V0ZGlmZihhcnIsIHNldGEsIHNldGIsIGZzZXRhLCBmc2V0YiwgaW5kZXhhLCBpbmRleGIsIGFycmF5X2luZGV4LCBzdW1hLCBzdW1iLCBkaWZmKTsKCQoJY291dCA8PCAiU2V0IDEgPT4gIjsKCWZvcihpbnQgaSA9IDA7IGkgPD0gbiAmJiBmc2V0YVtpXSAhPSAtMTsgaSsrKSBjb3V0IDw8IGZzZXRhW2ldIDw8ICIgIjsKCWNvdXQgPDwgZW5kbCA8PCAiU2V0IDIgPT4gIjsKCWZvcihpbnQgaSA9IDA7IGkgPD0gbiAmJiBmc2V0YltpXSAhPSAtMTsgaSsrKSBjb3V0IDw8IGZzZXRiW2ldIDw8ICIgIjsJCgljb3V0IDw8ICJcbkRpZmZlcmVuY2UgPT4gIiA8PCBkaWZmIDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewoJCglpbnQgYXJyW10gPSB7MSw3LDQsMTF9OyAKCWludCBuID0gc2l6ZW9mKGFycikvc2l6ZW9mKGFyclswXSk7Cgl0b3Bkb3duKGFyciwgbik7CglyZXR1cm4gMDsKfQ==