HDU1003 最大子序列和问题
2007-12-23 13:47
387 查看
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1003
#include <iostream>
#include <vector>
using namespace std;
int MaxSubSum(const vector<int>& v,int& start,int& end)
{//求最大子序列和
int maxSum = -2000,thisSum = 0,i,t=0;
for(i=0;i<v.size();++i)
{
thisSum += v[i];
if(thisSum>maxSum)
{
maxSum = thisSum;
start = t;
end = i;
}
if(thisSum<0)
{
thisSum = 0;
t = i+1;
}
}
return maxSum;
}
int main(int argc, char *argv[])
{
int caseNum,curCase=0,nNum,temp,maxSum=0,start=0,end=0;
cin>>caseNum;
do
{
curCase++;
cin>>nNum;
vector<int> v;
for(int i=0;i<nNum;++i)
{
cin>>temp;
v.push_back(temp);
}
cout<<"Case "<<curCase<<":"<<endl;
maxSum = MaxSubSum(v,start,end);
cout<<maxSum<<" "<<start+1<<" "<<end+1<<endl;
if(curCase<caseNum)
cout<<endl;
}while(curCase<caseNum);
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
int MaxSubSum(const vector<int>& v,int& start,int& end)
{//求最大子序列和
int maxSum = -2000,thisSum = 0,i,t=0;
for(i=0;i<v.size();++i)
{
thisSum += v[i];
if(thisSum>maxSum)
{
maxSum = thisSum;
start = t;
end = i;
}
if(thisSum<0)
{
thisSum = 0;
t = i+1;
}
}
return maxSum;
}
int main(int argc, char *argv[])
{
int caseNum,curCase=0,nNum,temp,maxSum=0,start=0,end=0;
cin>>caseNum;
do
{
curCase++;
cin>>nNum;
vector<int> v;
for(int i=0;i<nNum;++i)
{
cin>>temp;
v.push_back(temp);
}
cout<<"Case "<<curCase<<":"<<endl;
maxSum = MaxSubSum(v,start,end);
cout<<maxSum<<" "<<start+1<<" "<<end+1<<endl;
if(curCase<caseNum)
cout<<endl;
}while(curCase<caseNum);
return 0;
}
相关文章推荐
- HDU1003 最大子序列和问题
- HDU1003 Max Sum 最大子序列和的问题【四种算法分析+实现】
- 最大子序列求和问题
- 最大子序列和的问题
- 【数据结构】最大子序列问题
- 算法分析——最大连续子序列和的问题
- 最大子序列和问题
- 合唱队(求最大子序列问题)
- 最大子序列和的问题
- 最大数字序列和问题,买卖股票问题,以及最长公共字串问题
- 最大子序列和问题(4种方法,按时间复杂度)
- 最大子序列和问题的解
- Max Sum(HDU1003)最大连续子序列和
- 动态规划_最大公共子序列长度问题
- 最大子序列和问题
- 最大子序列问题
- Common Subsequence 最大公共子序列问题
- 数字序列加入+,*运算符后取得最大值问题; 动态规划;打破传统从决策入手思想;找出问题的特有性质;从例子入手找特点;
- 最大子序列求和问题
- HDU1003最大连续子序列和