HDOJ 1003题解
2015-06-03 15:57
459 查看
HDOJ 1003题解
/* *author:chenhas *date:2015.06.03 *problem:HDOJ 1003 Max Sum */ #include<iostream> using namespace std; int MaxSubSum(int *data, int dataNum, int &beg, int &end) { int thisSum = 0, maxSum = -1001; for(int i = 0; i < dataNum; ++i) { thisSum += data[i]; if(thisSum > maxSum) { // cout << maxSum << " " << i + 1 << endl; end = i + 1; maxSum = thisSum; } if(thisSum < 0) { thisSum = 0; } } thisSum = 0; if(maxSum != 0) { for(int i = end - 1; i >= 0; --i) { thisSum += data[i]; if(thisSum == maxSum) { beg = i + 1; } } } else { for(int i = 0; i < dataNum; ++i) { if(data[i] == 0) { beg = i + 1; end = i + 1; } } } return maxSum; } int main() { int caseNum = 0; int dataNum = 0; int *data; cin >> caseNum; for(int i = 0; i < caseNum; ++i) { cin >> dataNum; data = new int[dataNum]; for(int j = 0; j < dataNum; ++j) { cin >> data[j]; } int beg = 1, end = dataNum; int maxSum = MaxSubSum(data, dataNum, beg, end); if(i != caseNum - 1) { cout << "Case " << i + 1 << ":" << endl; cout << maxSum << " " << beg << " " << end << endl << endl; } else { cout << "Case " << i + 1 << ":" << endl; cout << maxSum << " " << beg << " " << end << endl; } } system("pause"); return 0; }
提交代码后一直显示WA,后来才知道错误原因,刚开始写成
maxSum = data[0],所以这样的数据就过不了,如
5 8 -1 -2 -3 -4,改成
max = -1001就可以解决了,因为题目说数字范围是-1000~1000,这道题的解法思路是参考陈越姥姥的mooc数据结构课上的在线处理算法。
与本题类似的题型是 Maximum Subsequence Sum (25)
和01-复杂度1. 最大子列和问题
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#数据结构与算法揭秘二
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#常见算法面试题小结
- JavaScript 组件之旅(二)编码实现和算法
- JavaScript数据结构和算法之图和图算法