Bài toán: Nhân viên ở két k. Vệ sĩ trái ở l < k, vệ sĩ phải ở m > k. Nhân viên có thể lấy tiền tại két hiện tại hoặc di chuyển sang két liền kề. Không được vào két có vệ sĩ. Mảng A lưu số tiền mỗi két. Tìm tổng tiền tối đa.
Quan sát: Nhân viên chỉ có thể truy cập các két trong khoảng (l, m) (loại trừ l và m). Vì không thể qua vệ sĩ. Vậy chỉ cần đếm số phần tử A[i] thỏa l < A[i] < m.
Code C++
#include <bits/stdc++.h>
using namespace std;
int solve(int k, int l, int m, vector<int> A) {
int cnt = 0;
for (int x : A)
if (x > l && x < m) cnt++;
return cnt;
}
int main() {
int k = 5, l = 3, m = 7;
vector<int> A = {4, 7, 5, 5, 3, 6, 2, 8};
cout << solve(k, l, m, A) << endl; // 4
return 0;
}
Kết quả
4
Các giá trị hợp lệ: 4, 5, 5, 6 (đều trong (3,7)).