最大连续子序列和(经典DP) 之 hdu 1231 最大连续子序列
2014-08-01 15:16
465 查看
// [8/1/2014 Sjm] /* 经典问题。。。
状态:以当前位置i结尾的最大连续子序列和
*/
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <string> #include <algorithm> #include <cstring> #include <set> #include <utility> #include <locale> #include <ctime> using namespace std; //using int64 = long long; const int INF = 0x3f3f3f3f; const int MaxN = 10010; int N, arr[MaxN]; void Solve() { int ans = -1, maxTmp = -1; int beginTmp = 0, endTmp = 0, ibegin = 0, iend = 0; for (int i = 0; i < N; ++i) { if (maxTmp < 0) { maxTmp = arr[i]; beginTmp = i; endTmp = i; }else { maxTmp += arr[i]; endTmp = i; } if (maxTmp > ans) { ans = maxTmp; //cout << "---" << ans << endl; ibegin = beginTmp; iend = endTmp; } } cout << ans << " " << arr[ibegin] << " " << arr[iend] << endl; } int main() { #ifdef HOME freopen("in", "r", stdin); //freopen("out", "w", stdout); #endif while (cin >> N && N) { bool judge = true; for (int i = 0; i < N; ++i) { cin >> arr[i]; if (arr[i] >= 0) judge = false; } if (judge) { cout << 0 << " " << arr[0] << " " << arr[N - 1] << endl; } else { Solve(); } } #ifdef HOME cerr << "Time elapsed: " << clock() / CLOCKS_PER_SEC << " ms" << endl; #endif return 0; }
相关文章推荐
- 最大连续子序列和(经典DP) 之 hdu 1231 最大连续子序列
- HDU 1231 最大连续子序列(经典题目,DP)
- HDU 1231:最大连续子序列(DP)
- HDU--1231 : 最大连续子序列 (DP求连续子序列最大和)
- hdu 1231 最大连续子序列(DP)
- HDU 1231 最大连续子序列 (线性dp)
- hdu 1003/poj 1050 连续子序列最大和经典基础dp
- HDU 1231 最大连续子序列 (dp)
- HDU 1231 最大连续子序列 dp
- HDU 1231:最大连续子序列(DP)
- 最大连续子序列(HDU_1231) 基础DP
- HDU 1231 最大连续子序列 DP题解
- hdu 1231 最大连续子序列 DP
- HDU 1231 最大连续子序列 (DP)
- hdu 1231最大连续子序列 【DP】
- HDU 1231——最大连续子序列(DP)
- hdu 1231 最大连续子序列(DP)
- ACM_HDU 1231 最大连续子序列 (dp)_代码分析
- hdu 1231 最大连续子序列(dp)
- hdu 1231 最大连续子序列 (dp)