首页 > 编程知识 正文

最大子序列和问题,最大连续子序列和问题python

时间:2023-05-05 00:17:55 阅读:26876 作者:2288

输入长度为n的整数序列,从中找到长度小于或等于m的连续子序列,使子序列中所有数的和最大化。

输入格式

在第一行中输入两个整数n,m。

在第二行中,输入表示长度为n的整数序列的n的个数。

用空格分隔相同的行数。

输出格式

输出表示序列最大子序和的整数。

数据范围

1n,m300001n,m300000

输入示例:

6 4

1 -3 5 1 -2 3

输出示例:

7

# include iostream # includedequeusingnamespacestd; dequeint q; int arr[300010]; int sum[300010] int main () { int n,m; scanf_s('%d%d ',n,m ); 短信(arr,0,sizeof ) arr ); memset(ARR,0,sizeof ) sum ); for(intI=1; i=n; I ) Scanf_s('%d ',arr[i]; sum[i]=sum[i - 1] arr[i]; } int res=-INT_MIN; int l,r; //左区间和右区间for(intI=1; i=n; I () { while (! q.empty(I-q.front ) (m ) ) /? 为什么大于: sum[i]-sum[k]的长度M=4 q.pop_front(//如果队列中的数量超过m,请单击(} int k )上一个弹出窗口; if (! q.empty () ) k=q.front ); else k=0; if(RESsum[i] - sum[k] ) RES=max ) RES,sum[I]-sum[k] ); l=k 1; r=i; } while (! q.empty (sum [ q.back ]=sum [ I ] ) /利用前缀和保持单调队列,根据前缀和的性质q.pop_back ); ) q.push_back(I; //q中的sum[]保持单调} cout res' 'l' 'rendl; 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。