# include <iostream>
# include <iomanip>
namespace
{
{
std::cout << "Values: [";
for (
size_t i = 0; i < vals.
size(); ++i)
{
if (i > 0)
std::cout << ", ";
std::cout << vals[i];
}
std::cout << "]\n";
}
{
{
std::cout << "Chosen subset: [empty]\n";
return;
}
int sum = 0;
std::cout << "Chosen subset: ";
for (
size_t i = 0; i < idx.
size(); ++i)
{
if (i > 0)
std::cout << " + ";
std::cout << vals[idx[i]];
sum += vals[idx[i]];
}
std::cout << " = " << sum << "\n";
}
}
{
std::cout << "\n=== Subset Sum Toolkit ===\n\n";
{
std::cout << "Scenario A: Classical DP reconstruction\n";
print_rule();
const int target = 9;
print_values(vals);
std::cout << "Target: " << target << "\n";
print_solution(vals,
r.selected_indices);
else
std::cout << "No subset found.\n";
std::cout << "\n";
}
{
std::cout << "Scenario B: Existence-only API\n";
print_values(vals);
<< "\n";
<< "\n";
std::cout << "\n";
}
{
std::cout << "Scenario C: Counting all subsets by target\n";
print_values(vals);
for (int t = 3; t <= 10; ++t)
std::cout << " target=" << std::setw(2) << t << " -> "
std::cout << "\n";
}
{
std::cout << "Scenario D: Meet-in-the-middle with signed values\n";
const int target = 10;
print_values(vals);
std::cout << "Target: " << target << "\n";
print_solution(vals,
r.selected_indices);
else
std::cout << "No subset found.\n";
std::cout << "\n";
}
{
std::cout << "Scenario E: DP vs MITM consistency table\n";
print_values(vals);
std::cout << std::setw(8) << std::left << "Target"
<< std::setw(8) << "DP"
<< std::setw(8) << "MITM" << "\n";
for (int t = 0; t <= 30; t += 5)
{
std::cout << std::setw(8) << std::left << t
<< std::setw(8) << (dp_ans ? "true" : "false")
<< std::setw(8) << (mitm_r.exists ? "true" : "false") << "\n";
}
}
std::cout << "\nDone.\n";
return 0;
}
Subset sum algorithms: classical DP and meet-in-the-middle.
Simple dynamic array with automatic resizing and functional operations.
constexpr size_t size() const noexcept
Return the number of elements stored in the stack.
constexpr bool is_empty() const noexcept
Checks if the container is empty.
Main namespace for Aleph-w library functions.
bool subset_sum_exists(const Array< T > &values, T target)
Subset sum existence check (space-optimized).
size_t subset_sum_count(const Array< T > &values, T target)
Count the number of subsets summing to target.
Subset_Sum_Result< T > subset_sum_mitm(const Array< T > &values, T target)
Subset sum via meet-in-the-middle (MITM).
void print_rule()
Prints a horizontal rule for example output separation.
Subset_Sum_Result< T > subset_sum(const Array< T > &values, T target)
Subset sum via classical DP with reconstruction.