56 std::cout <<
"Values: [";
57 for (
size_t i = 0; i <
vals.size(); ++i)
78 std::cout <<
"Chosen subset: [empty]\n";
83 std::cout <<
"Chosen subset: ";
84 for (
size_t i = 0; i < idx.
size(); ++i)
88 std::cout <<
vals[idx[i]];
91 std::cout <<
" = " <<
sum <<
"\n";
112 std::cout <<
"\n=== Subset Sum Toolkit ===\n\n";
116 std::cout <<
"Scenario A: Classical DP reconstruction\n";
119 const int target = 9;
122 std::cout <<
"Target: " << target <<
"\n";
128 std::cout <<
"No subset found.\n";
135 std::cout <<
"Scenario B: Existence-only API\n";
149 std::cout <<
"Scenario C: Counting all subsets by target\n";
153 for (
int t = 3; t <= 10; ++t)
154 std::cout <<
" target=" << std::setw(2) << t <<
" -> "
162 std::cout <<
"Scenario D: Meet-in-the-middle with signed values\n";
165 const int target = 10;
167 std::cout <<
"Target: " << target <<
"\n";
173 std::cout <<
"No subset found.\n";
180 std::cout <<
"Scenario E: DP vs MITM consistency table\n";
184 std::cout << std::setw(8) << std::left <<
"Target"
185 << std::setw(8) <<
"DP"
186 << std::setw(8) <<
"MITM" <<
"\n";
187 for (
int t = 0; t <= 30; t += 5)
191 std::cout << std::setw(8) << std::left << t
192 << std::setw(8) << (
dp_ans ?
"true" :
"false")
193 << std::setw(8) << (
mitm_r.exists ?
"true" :
"false") <<
"\n";
198 std::cout <<
"\nDone.\n";
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.
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.
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.
T sum(const Container &container, const T &init=T{})
Compute sum of all elements.
int main()
Demonstrates multiple subset-sum algorithms and queries using the Aleph-w library.