注意输出的是对应的数值,而不是下标
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100010;
struct node
{
int st;
int ed;
int data;
}a[maxn];
int d[maxn]={0};
bool cmp(node b,node c)
{
if(b.data!=c.data)return b.data>c.data;
else return b.ed<c.ed;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&d[i]);
}
a[0].data=d[0];
a[0].st=0;
a[0].ed=0;
for(int i=1;i<n;i++)
{
if(a[i-1].data>0)
{
a[i].data=a[i-1].data+d[i];
a[i].st=a[i-1].st;
a[i].ed=i;
}
else
{
a[i].data=d[i];
a[i].st=i;
a[i].ed=i;
}
}
sort(a,a+n,cmp);
if(a[0].data<0) printf("0 %d %d",d[0],d[n-1]);
else printf("%d %d %d",a[0].data,d[a[0].st],d[a[0].ed]);
}
本文详细介绍了使用C++实现动态规划算法求解最大子段和问题的方法,通过具体代码示例展示了如何高效地找到数组中具有最大和的连续子段,并输出该子段的数值而非下标。
735

被折叠的 条评论
为什么被折叠?



