제출 #1142420

#제출 시각아이디문제언어결과실행 시간메모리
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...