diff --git a/Exercise/Extra/最大连续子序列.cpp b/Exercise/Extra/最大连续子序列.cpp new file mode 100644 index 0000000..f0dc330 --- /dev/null +++ b/Exercise/Extra/最大连续子序列.cpp @@ -0,0 +1,43 @@ +#include +#include +using namespace std; +int main(){ + int n; + cin >> n; + vector arr(n), dp(n); + for(int i = 0; i < n; i++){ + cin >> arr[i]; + } + dp[0] = arr[0]; + int smax = -1; + bool hasans = false; + for(int i = 1; i < n; i++){ + dp[i] = max(dp[i - 1] + arr[i], arr[i]); + if(dp[i] >= 0) hasans = true; + if(dp[i] > smax) smax = dp[i]; + } + if(!hasans){ + cout << "0" << endl; + cout << "-1" << " " << "-1" << endl; + return 0; + } else{ + int js = -1; + for(int i = 0; i < n; i++){ + if(dp[i] == smax) { + js = i; + break; + } + } + int sum = 0; + for(int i = js; i >= 0; i--){ + sum += arr[i]; + if(sum == smax){ + sum = i; + cout << smax << endl; + cout << sum << " " << js << endl; + return 0; + } + } + } + return 0; +}