#include <iostream>
#include <vector>
using namespace std;
int n, a[10], f[10];
vector<bool> dp(10000, false);
int d = 1;
void mark(int sum) {
dp[sum] = true;
}
void pr(int sum) {
cout << d << ": ";
for (int i = 0; i < n; i++) {
if (f[i] > 0)
cout << a[i] << " ";
}
cout << " => sum: " << sum << endl;
d++;
}
void binary(int i, int sum) {
for (int j = 0; j <= 1; j++) {
f[i] = 0;
if (j == 1)
f[i] = 1;
sum += f[i] * a[i];
if (i == n - 1) {
mark(sum);
// đánh dấu m = sum là có thể phân tích thành tổng ai
pr(sum);
} else {
binary(i + 1, sum);
}
if (j == 1) sum -= f[i] * a[i];
}
}
int findSmallestMissing() {
for (int m = 1; m < dp.size(); m++) {
if (!dp[m]) return m;
}
return -1;
}
int main() {
cout << "n: ";
cin >> n;
cout << "a[]: ";
for (int i = 0; i < n; i++) {
cin >> a[i];
}
binary(0, 0);
int m = findSmallestMissing();
cout << "min m = " << m << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG4sIGFbMTBdLCBmWzEwXTsKdmVjdG9yPGJvb2w+IGRwKDEwMDAwLCBmYWxzZSk7CmludCBkID0gMTsKCnZvaWQgbWFyayhpbnQgc3VtKSB7CiAgICBkcFtzdW1dID0gdHJ1ZTsKfQoKdm9pZCBwcihpbnQgc3VtKSB7CiAgICBjb3V0IDw8IGQgPDwgIjogIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgaWYgKGZbaV0gPiAwKQogICAgICAgICAgICBjb3V0IDw8IGFbaV0gPDwgIiAiOwogICAgfQogICAgY291dCA8PCAiID0+IHN1bTogIiA8PCBzdW0gPDwgZW5kbDsKICAgIGQrKzsKfQoKdm9pZCBiaW5hcnkoaW50IGksIGludCBzdW0pIHsKICAgIGZvciAoaW50IGogPSAwOyBqIDw9IDE7IGorKykgewogICAgICAgIGZbaV0gPSAwOwogICAgICAgIGlmIChqID09IDEpIAogICAgICAgICAgICBmW2ldID0gMTsKICAgICAgICBzdW0gKz0gZltpXSAqIGFbaV07CiAgICAgICAgaWYgKGkgPT0gbiAtIDEpIHsKICAgICAgICAgICAgbWFyayhzdW0pOyAKICAgICAgICAgICAgLy8gxJHDoW5oIGThuqV1IG0gPSBzdW0gbMOgIGPDsyB0aOG7gyBwaMOibiB0w61jaCB0aMOgbmggdOG7lW5nIGFpCiAgICAgICAgICAgIHByKHN1bSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYmluYXJ5KGkgKyAxLCBzdW0pOwogICAgICAgIH0KICAgICAgICBpZiAoaiA9PSAxKSBzdW0gLT0gZltpXSAqIGFbaV07CiAgICB9Cn0KCmludCBmaW5kU21hbGxlc3RNaXNzaW5nKCkgewogICAgZm9yIChpbnQgbSA9IDE7IG0gPCBkcC5zaXplKCk7IG0rKykgewogICAgICAgIGlmICghZHBbbV0pIHJldHVybiBtOwogICAgfQogICAgcmV0dXJuIC0xOwp9CgppbnQgbWFpbigpIHsKICAgIGNvdXQgPDwgIm46ICI7CiAgICBjaW4gPj4gbjsKICAgIAogICAgY291dCA8PCAiYVtdOiAiOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgIH0KCiAgICBiaW5hcnkoMCwgMCk7CgogICAgaW50IG0gPSBmaW5kU21hbGxlc3RNaXNzaW5nKCk7CiAgICBjb3V0IDw8ICJtaW4gbSA9ICIgPDwgbSA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==