• 前缀和系列题目


    最大数

    题目描述:
    N个数围成一圈,要求从中选择若干个连续的数(注意每个数最多只能选一次)加起来,问能形成的最大的和。
    输入描述:
    第一行输入N,表示数字的个数,第二行输入这N个数字。
    输出描述 Output Description
    输出最大和。
    样例输入:
    8
    2 -4 6 -1 -4 8 -1 3
    样例输出:
    14
    数据范围及提示:
    数据说明:
    40% 1<=N<=300
    60% 1<=N<=2000
    100% 1<= N<=100000,答案在longint范围内。

    #include<iostream>
    using namespace std;
    int n,maxn,minn,ans=-10000000,x,s[100001];
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>x;
            s[i]=s[i-1]+x;
        }
        maxn=minn=s[n];
        for(int i=n-1;i>=1;i--)
        {
            ans=max(ans,max(maxn-s[i],s[n]+s[i]-minn));
            maxn=max(s[i],maxn);
            minn=min(s[i],minn);
        }
        cout<<ans;
        return 0;
    }

    连续和

    题目描述:
    给定n个数 a1 , a2 , … , an
    定义 fi,j = ai + ai+1 + ai+2 + … + aj-1 + aj (1 ≤ i ≤ j ≤ n)
    求 fi,j 的最大值
    输入描述:
    第一行有1个数,n
    第二行有n个数,a1 , a2 , … , an
    输出描述 Output Description
    输出只有一行,fi,j 的最大值
    样例输入:
    7
    3 6 -8 9 -12 1 2
    样例输出 Sample Output
    10
    数据范围及提示:
    样例中当 i = 1 , j = 4 时,fi,j = a1 + a2 + a3 + a4 = 3 + 6 - 8 + 9 = 10 为最大值
    数据规模:
    10%的数据 n = 7
    30%的数据 n ≤ 1000
    100%的数据 n ≤ 1000000 -1000 ≤ ai ≤ 1000 (1 ≤ i ≤ n)

    #include<iostream>
    using namespace std;
    long long n,x,minn,ans=-100000000000,s[1000001];
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>x;
            s[i]=s[i-1]+x;
        }
        for(int i=1;i<=n;i++)
        {
            ans=max(ans,s[i]-minn);
            minn=min(minn,s[i]);
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    页脚保持在未满屏页面的底部
    jquery tab选项卡
    Unity 物体在屏幕内跟随鼠标移动
    Unity 中一些图形学知识
    Unity 简单的第三人称视角
    Unity 一个简单的鼠标跟随
    Unity常用操作代码
    3D渲染管线
    教你如何利用threejs对3D模型皮肤进行DIY
    从Maya中把模型搬运至网页的过程
  • 原文地址:https://www.cnblogs.com/cax1165/p/6071009.html
Copyright © 2020-2023  润新知