Find the contiguous subarray
within an array which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1],the largest sum = 6.//动态规划,带下标#include<iostream>#include<vector>usingnamespacestd;
int max_sub(vector<int>& v,int& begin,int& end)
{
int s=v[0];
int max=v[0];
int cur_begin=0;
for(int i=1;i<v.size();i++)
{
if(s<0)
{
s=v[i];
cur_begin=i;
}
else
{
s+=v[i];
}
if(s>max)
{
max=s;
begin=cur_begin;
end=i;
}
}
return max;
}
int main()
{
vector<int> v={-2,1,-3,4,-1,2,1,-5,4};
//vector<int> v={-2,-1,-3,-4,-5};int begin=0;
int end=0;
cout<<max_sub(v,begin,end)<<endl;
cout<<"begin index:"<<begin<<endl;
cout<<"end index:"<<end<<endl;
}
//另一种写法
动态规划转移方程:
dp[i]=max(v[i],dp[i-1]+v[i])
res=max(res,dp[i])
#include<iostream>#include<vector>usingnamespacestd;
int max_sub(vector<int>& v)
{
int res=v[0];
vector<int> dp(v.size());
dp[0]=v[0];
for(int i=1;i<v.size();i++)
{
dp[i]=max(v[i],dp[i-1]+v[i]);
res=max(dp[i],res);
}
return res;
}
int main()
{
vector<int> v={-2,1,-3,4,-1,2,1,-5,4};
//vector<int> v={-2,-1,-3,-4,-5};cout<<max_sub(v)<<" ";
}