Submission #1142420

#TimeUsernameProblemLanguageResultExecution timeMemory
1142420g4yuhgK blocks (IZhO14_blocks)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int N, K, A[105], minSum = INT_MAX;
vector<int> blocks; // Lưu max của từng block hiện tại

void backtrack(int idx, int curK) {
    if (curK > K) return; // Nếu đã chia nhiều hơn K block, bỏ nhánh này

    if (idx == N) {
        if (curK == K) { // Đúng K block mới cập nhật
            int curSum = accumulate(blocks.begin(), blocks.end(), 0);
            minSum = min(minSum, curSum);
        }
        return;
    }

    // Thử đưa A[idx] vào từng block đã có
    for (int i = 0; i < curK; i++) {
        int oldMax = blocks[i];
        blocks[i] = max(blocks[i], A[idx]);
        backtrack(idx + 1, curK);
        blocks[i] = oldMax; // Quay lui
    }

    // Hoặc tạo block mới nếu chưa đạt K block
    if (curK < K) {
        blocks.push_back(A[idx]);
        backtrack(idx + 1, curK + 1);
        blocks.pop_back(); // Quay lui
    }
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    cin >> N >> K;
    for (int i = 0; i < N; i++) cin >> A[i];

    backtrack(0, 0);
    cout << minSum << endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...