#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int n, A, B;
vector<int> Y;
vector<int> prefix_sum;
int min_beauty = INT_MAX;
// Hàm tính tổng từ chỉ số l đến r (0-indexed)
int get_sum(int l, int r) {
return prefix_sum[r + 1] - prefix_sum[l];
}
// Hàm đệ quy để chia mảng thành groups_left nhóm liên tiếp
void dfs(int pos, int groups_left, vector<int>& group_sums) {
if (groups_left == 1) {
if (pos >= n) return; // không đủ phần tử
int total = get_sum(pos, n - 1);
int or_val = 0;
for (int sum : group_sums)
or_val |= sum;
or_val |= total;
min_beauty = min(min_beauty, or_val);
return;
}
for (int i = pos; i <= n - groups_left; ++i) {
int total = get_sum(pos, i);
group_sums.push_back(total);
dfs(i + 1, groups_left - 1, group_sums);
group_sums.pop_back();
}
}
int main() {
// Nhập đầu vào
cin >> n >> A >> B;
Y.resize(n);
prefix_sum.resize(n + 1, 0);
for (int i = 0; i < n; ++i) {
cin >> Y[i];
prefix_sum[i + 1] = prefix_sum[i] + Y[i];
}
// Duyệt số nhóm từ A đến B
for (int x = A; x <= B; ++x) {
vector<int> group_sums;
dfs(0, x, group_sums);
}
cout << min_beauty << endl;
return 0;
}
# | 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... |