总结: 无
A.tb的区间问题
题意:
对一个数组进行k次删除操作, 对于操作删除只能删除最左元素或者最右元素, 求出k次操作后数组和的最大值
思路:
由于删除最左元素和最右元素那么必然最后得到的数组和是一个连续的区间, 那么删除k 也就是剩余n - k的空间, 通过前缀和预处理得到每一段n - k区间的值取最大值就i是最终答案 (这个是逆序思维)
Code:
#include <bits/stdc++.h> using namespace std; void solve() { using i64 = long long; int n, k; cin >> n >> k; vector <i64> pre(n + 1); k = n - k; i64 ans = 0; for (int i = 1; i <= n; i++) { int x; cin >> x; pre[i] = pre[i - 1] + x; if (i >= k) { ans = max(ans, pre[i] - pre[i - k]); } } cout << ans; } int main() { cin.tie(0) -> sync_with_stdio(false); int t = 1; // cin >> t; while (t--) { solve(); } return 0; }