Description
有N个数字,从中选择出连续M(L1<=M<=L2)个数,求出他们之和的最大值
Format
Input
第一排有三个数N, L1, L2。
接下来的N行,每行一个数
1<=L1<=L2<=N,
1<=N<=200000,
-210^9<=每个数<=210^9
Output
一个数字,表示求出来的和的最大值
Samples
输入数据 1
10 6 8
49
-87
-34
-97
61
33
-65
-63
56
50
输出数据 1
72
我的代码里面有梗(TLE)
#include<bits/stdc++.h>
using namespace std;
int GGbond(int nums[1145140],int n,int L1,int L2)
{
// 计算前缀和数组
int s[1145140];
memset(s,0,sizeof(s));
for (int i=1;i<=n;i++)
s[i]=s[i-1]+nums[i-1];
int ans=INT_MIN;
for (int i=L1;i<=n;i++)
for (int j=L1;j<=min(i,L2);j++)
{
int sum=s[i]-s[i-j]; // 计算当前连续数字的和
ans=max(ans,sum);// 更新最大和
}
return ans;
}
int main()
{
int n,L1,L2;
cin>>n>>L1>>L2;
int nums[n];
for (int i=0;i<n;i++)
cin>>nums[i];
int ikun=GGbond(nums,n,L1,L2);
cout<<ikun<<endl;
return 0;
}
求DL帮忙改一下(实在改不出了QWQ)
奇怪的是:样例都没过居然没有WA