社区讨论
求助
学术版参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo11x88k
- 此快照首次捕获于
- 2023/10/22 13:51 2 年前
- 此快照最后确认于
- 2023/11/02 13:21 2 年前
题目:
Background
输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大。
例如
当时,
当或时,
Input
第一行两个数
第二行有个数,要求在个数找到最大子序和
Output
一个数,数出他们的最大子序和
Samples
INPUT16 4
1 -3 5 1 -2 3
OUTPUT17
Limitation
满足
我的代码:
CPP#include<cstdio>
using namespace std;
long long n,m;
long long a[300010];
long long f[300010];
long long step[300010];
long long max(long long a,long long b){
return (a>b)?a:b;
}
int main(){
scanf("%lld%lld",&n,&m);
for(long long i=1;i<=n;i++){
scanf("%lld",&a[i]);
f[i]=a[i];
step[i]=1;
}
long long maxx=-0x7fffffff;
for(long long i=1;i<=n;i++){
if(f[i-1]>0){
f[i]+=f[i-1];
step[i]+=step[i-1];
}
if(step[i]>m){
step[i]--;
f[i]-=a[i-step[i]];
}
if(f[i]>maxx){
maxx=f[i];
}
}
printf("%lld",maxx);
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...