#include #include #include using namespace std; int N, K, M; vector A; int max_score = 0; // Hàm tính tổng giá trị tuyệt đối của từng nhóm int calculateScore(const vector>& groups) { int score = 0; for (const auto& group : groups) { int sum = 0; for (int x : group) sum += x; score += abs(sum); } return score; } // Hàm thử tất cả cách chia nhóm (Backtracking) void backtrack(int idx, vector>& groups) { if (idx == N) { if (groups.size() == K) { max_score = max(max_score, calculateScore(groups)); } return; } // Thêm phần tử A[idx] vào nhóm hiện tại nếu chưa đầy M phần tử if (!groups.empty() && groups.back().size() < M) { groups.back().push_back(A[idx]); backtrack(idx + 1, groups); groups.back().pop_back(); } // Bắt đầu một nhóm mới (nếu chưa đủ K nhóm) if (groups.size() < K) { groups.push_back({A[idx]}); backtrack(idx + 1, groups); groups.pop_back(); } } int main() { cin >> N >> K >> M; A.resize(N); for (int i = 0; i < N; i++) cin >> A[i]; vector> groups; backtrack(0, groups); cout << max_score << endl; return 0; }