求一个数组中最大连续子序和问题
1.贪心:如果前n项和相加小于零,则舍弃前n项,最后找到最大值
#include
#include
using namespace std;
int main()
{
int n;
cin>>n;//输入的数据大小为n
int a[10003];//定义一个整型数组
for(int i=0;i<n;i++)
cin>>a[i];
int num[10003];//求和后的数组
num[0]=a[0];//第0个元素初始化为a[0]
for(int i=1;i<n;i++)
{
if(num[i-1]<0)
num[i]=a[i];
else
num[i]=num[i-1]+a[i];
}
sort(num,num+n);//对求和后的数组进行排序,找到最大值
cout<<num[n-1]<<endl;
}
动态规划
从0到n遍历,如果第i个元素大于零,则第i+1个元素加上第i个元素的数据
#include
#include
using namespace std;
int main()
{
int n;
cin>>n;
int before[10003];
for(int i=0;i<n;i++)
cin>>before[i];
for(int i=1;i<n;i++)
{
if(before[i-1]>0)
before[i]+=before[i-1];
}
sort(before,before+n);
cout<<before[n-1];
}