JakeLinおよび最大のサブシーケンス問題DP

タイトルの説明

長さNの指定された整数シーケンスAの場合、その「サブシーケンス」は、Aの空でない連続要素(整数)として定義されます。タスクは、可能なすべてのサブシーケンスの中からサブシーケンスを見つけることです。サブシーケンスのすべての要素の合計が最大になります(他のすべてのサブシーケンスと比較して)。プログラムでは、この最大値を出力する必要があります。

入力

入力ファイルの最初の行には整数Nが含まれ、2番目の行にはNの整数、つまりAが含まれています。 
ここで、 
1 <= N <= 100000 
-10000 <= A [i] <= 10000 

アウトプット

出力には整数のみが含まれ、計算した答えを示します。 

入力例

5 
3 -2 3 -5 4

出力例

4

元のタイトルリンク:最大サブシーケンス 

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int num[100010];
int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&num[i]);
    }
    //2种可能:  1.把新来的数加进当前序列   2.以新来的数重开一个序列   取二者大的情况 
    int res=num[0];  //最终结果 
    int sum=num[0]; //sum:当前序列和 
    for(int i=1;i<n;i++){
        sum += num[i];   //当前的sum加上新来的数 
        sum = max(sum,num[i]);   //看看是这种情况大,还是新来的数重开序列大 ,取大的情况 
        res = max(sum,res);   //看看这一次的决策是否能够更新结果呢 
    }
    cout<<res;
    return 0;
}

 

元の記事を20件公開 15 獲得 ビュー217

おすすめ

転載: blog.csdn.net/qq_37414463/article/details/105375995