題意:
有一個長度爲 n 的整數序列,它有很多子序列滿足兩個條件:(1)該子序列長度至少爲 m;(2) 該子序列是連續的。找到這些子序列中元素之和最小的那個子序列,輸出它的元素之和。
代碼:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int
minSubordinateSum(vector<int> &nums, int m)
{
int size = nums.size();
if (size < m || size <= 0)
throw "error";
int minSum = 0;
for (int i = 0; i < m; ++i)
minSum += nums[i];
int len = size - m + 1;
vector<vector<int>> dp(len, vector<int>(len));
dp[0][0] = minSum;
for (int i = m, j = 1; i < size; ++i, ++j)
{
dp[0][j] = minSum + nums[i] - nums[i - m];
minSum = min(minSum, dp[0][j]);
}
for (int i = 1; i < len; ++i)
{
for (int j = 0; j < len - i; ++j)
{
dp[i][j] = dp[i - 1][j] + nums[j+m];
minSum = min(minSum, dp[i][j]);
}
}
return minSum;
}
void test2()
{
int n, m;
cin >> n >> m;
vector<int>nums(n);
for (size_t i = 0; i < nums.size(); ++i)
cin >> nums[i];
cout << minSubordinateSum(nums, m);
}
int main()
{
test2();
return 0;
}