/* 最大序列和 给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T 的“序列和”。对于S的所有非空连续子序列T,求和最大的子序列。 以上说明中:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。 */ #include <iostream> #include <fstream> #include <vector> using namespace std; int main() { ifstream ifs("execute.stdin"); int ival; vector<int> vecInt; while (ifs >> ival) vecInt.push_back(ival); ifs.close(); int tmpMax = 0, SumMax, i = 0, j = 0; vector<int> vecMemory, vecEnd; for (i = 0;i != vecInt.size();++i) { if (i == 0) { SumMax = vecInt[0]; vecEnd.push_back(vecInt[i]); } tmpMax += vecInt[i]; vecMemory.push_back(vecInt[i]); if (tmpMax > SumMax) { vecEnd.clear(); SumMax = tmpMax; for (j = 0;j != vecMemory.size();++j) vecEnd.push_back(vecMemory[j]); } else if (tmpMax < 0) { tmpMax = 0; vecMemory.clear(); } } for (i = 0;i != vecEnd.size();++i) cout << vecEnd[i] << " "; return 0; }
【C++】联发科初赛第一题《最大序列和》
最新推荐文章于 2021-03-17 22:44:40 发布