Вопрос пользователя:
Ответ нейросети:
#include <iostream> #include <vector> #include <algorithm>
bool partition(std::vector<int>& weights, std::vector<int>& subset1, std::vector<int>& subset2, std::vector<int>& subset3, int index, int sum1, int sum2, int sum3) { if (index == weights.size()) { return sum1 == sum2 && sum2 == sum3; }
if (sum1 == sum2 && sum2 == sum3) {
return true;
}
bool canPartition1 = false, canPartition2 = false, canPartition3 = false;
if (sum1 + weights[index] <= sum2 && sum1 + weights[index] <= sum3) {
subset1.push_back(weights[index]);
canPartition1 = partition(weights, subset1, subset2, subset3, index + 1, sum1 + weights[index], sum2, sum3);
if (!canPartition1) {
subset1.pop_back();
}
}
if (!canPartition1 && sum2 + weights[index] <= sum1 && sum2 + weights[index] <= sum3) {
subset2.push_back(weights[index]);
canPartition2 = partition(weights, subset1, subset2, subset3, index + 1, sum1, sum2 + weights[index], sum3);
if (!canPartition2) {
subset2.pop_back();
}
}
if ((!canPartition1 && !canPartition2) && sum3 + weights[index] <= sum1 && sum3 + weights[index] <= sum2) {
subset3.push_back(weights[index]);
canPartition3 = partition(weights, subset1, subset2, subset3, index + 1, sum1, sum2, sum3 + weights[index]);
if (!canPartition3) {
subset3.pop_back();
}
}
return canPartition1 || canPartition2 || canPartition3;
}
int main() { int N; std::cin >> N;
std::vector<int> weights(N);
for (int i = 0; i < N; i++) {
std::cin >> weights[i];
}
std::vector<int> subset1, subset2, subset3;
if (partition(weights, subset1, subset2, subset3, 0, 0, 0, 0)) {
std::cout << subset1.size() << " ";
for (int i = 0; i < subset1.size(); i++) {
std::cout << subset1[i] << " ";
}
std::cout << std::endl;
std::cout << subset2.size() << " ";
for (int i = 0; i < subset2.size(); i++) {
std::cout << subset2[i] << " ";
}
std::cout << std::endl;
std::cout << subset3.size() << " ";
for (int i = 0; i < subset3.size(); i++) {
std::cout << subset3[i] << " ";
}
std::cout << std::endl;
} else {
std::cout << "-1" << std::endl;
}
return 0;
}
Напишите нам, если в вопросе есть ваши персональные данные ([email protected])
Обратите внимание: ответы, предоставляемые искусственным интеллектом, могут не всегда быть точными. Не рассчитывайте на них в критически важных областях, таких как медицина, юриспруденция, финансы или в вопросах, связанных с безопасностью. Для важных решений всегда обращайтесь к квалифицированным специалистам. Администрация сайта не несет ответственности за контент, сгенерированный автоматически.