#include<stdio.h>
void Maxsum(int a[],int n)
{
int sum=0,b=0;
int start=0,end=0;
for(int i=0;i<n;i++)
{
if(b<0)//b代表的是0-i-1内的任意元素到i-1的最大子序列和
{
b=a[i];//若到i-1的最大子序列和为负数,则到i的最大子序列和为i本身值较大
start=i;
}
else
b=b+a[i];
if(b>sum)
{
sum=b;
end=i;
}
}
printf("最大字串和为:%d\n",sum);
printf("起点为%d,终点为%d\n",start,end);
printf("最大子串为:") ;
for(int i=start;i<=end;i++)
printf("%d ",a[i]);
}
int main()
{
int a[]={1,2,3,4,-1,-1,-2,99,-5};
Maxsum(a,9);
}
最大子序列和动态规划
最新推荐文章于 2024-07-10 16:47:58 发布