intcalMax(int *W, int N, int M, int Q){ int states = 1 << (M - 1); vector<vector<int>> sum(N, vector<int>(states, -1)); sum[0][0] = 0; sum[0][1 << (M - 2)] = W[0];
for (int i = 1; i < N; i++) { for (int j = 0; j < states; j++) { if (sum[i - 1][j] != -1) { int s = 0; int t = j; for (int k = 0; k < M - 1; k++) { s += t & 1; t >>= 1; } if (s < Q) sum[i][(j >> 1) + (1 << (M - 2))] = max(sum[i - 1][j] + W[i], sum[i][(j >> 1) + (1 << (M - 2))]); sum[i][j >> 1] = max(sum[i - 1][j], sum[i][j >> 1]); } } }
int maxSum = 0; for (int i = 0; i < states; i++) if (sum[N - 1][i] > maxSum) maxSum = sum[N - 1][i];
return maxSum; }
intmain(){ int N = 0, M = 0, Q = 0; cin >> N >> M >> Q; int *W = newint[N]; for (int i = 0; i < N; i++) cin >> W[i];