数学考试(dp+前缀和)

数学考试

http://www.nowcoder.com/questionTerminal/e1e3e65479114efb9c68b1fe7db11b34

大多数人用的前缀和+dp
由于是两个区间,我们可以把这个区间分开。
第一个区间一直找最大值,然后紧接着第一个区间的下一个找最大值
然后计算两个 相加的最大值。
相当于遍历了所有长度为k的区间。只是固定了第一组在第二组前边(因为是连续的)。

#include<iostream>
#include<climits>
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
int t,n,k;
ll a[maxn];
int main(){
    int t;
    cin>>t;
    while(t--){
        cin>>n>>k;
        a[0]=0;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            a[i]+=a[i-1]; //计算前缀和
        }
        ll ans=INT_MIN,before=INT_MIN;
        for(int i=k;i+k<=n;i++){
            before=max(before,a[i]-a[i-k]); //计算第一组的最大值
            ans=max(ans,before+a[i+k]-a[i]);//第二组的最大值在第一组后边,当第一组找到最大后,依次找第二组的最大值
        }cout<<ans<<endl;
    }
    return 0;
}
全部评论

相关推荐

08-14 13:51
门头沟学院 Java
没有任何游戏经验....
投递米哈游等公司8个岗位
点赞 评论 收藏
分享
阿里系笔试成绩互通吗?
投递阿里巴巴控股集团等公司10个岗位
点赞 评论 收藏
分享
人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
08-15 17:35
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务