#include <vector>
#include <algorithm>
#include <functional>
std::vector<int> max_coupons(int A, std::vector<int> P, std::vector<int> T) {
    int N = P.size();
    std::vector<int> result;
    std::vector<int> indices(N);
    for (int i = 0; i < N; ++i) indices[i] = i;
    std::vector<bool> used(N, false);
    std::vector<int> current_path;
    std::function<void(int, int)> dfs = [&](int tokens, int depth) {
        if (depth > result.size()) result = current_path;
        for (int i = 0; i < N; ++i) {
            if (!used[i] && tokens >= P[i]) {
                used[i] = true;
                current_path.push_back(i);
                dfs((tokens - P[i]) * T[i], depth + 1);
                current_path.pop_back();
                used[i] = false;
            }
        }
    };
    dfs(A, 0);
    return result;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |