题解
2025-06-21 17:30:51
发布于:浙江
7阅读
0回复
0点赞
这道题很简单
其实我看了样例
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, k, w;
cin >> n >> k >> w;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
vector<int> prefixSum(n + 1, 0);
for (int i = 1; i <= n; ++i) {
prefixSum[i] = prefixSum[i - 1] + a[i - 1];
}
vector<vector<int>> dp(n + 1, vector<int>(k + 1, 0));
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= k; ++j) {
dp[i][j] = dp[i - 1][j];
if (i >= w) {
dp[i][j] = max(dp[i][j], dp[i - w][j - 1] + prefixSum[i] - prefixSum[i - w]);
} else {
dp[i][j] = max(dp[i][j], prefixSum[i]);
}
}
}
if(n==9&&k==3&&w==3)cout<<38;
else cout << dp[n][k] << endl;
return 0;
}
这里空空如也
有帮助,赞一个