1. 程式人生 > >C++ 關於最大連續子序列(和最大)問題

C++ 關於最大連續子序列(和最大)問題

/*
    江偉浚
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 17458    Accepted Submission(s): 7701


Problem Description
給定K個整數的序列{ N1, N2, ..., NK },其任意連續子序列可表示為{ Ni, Ni+1, ..., 
Nj },其中 1 <= i <= j <= K。最大連續子序列是所有連續子序列中元素和最大的一個, 
例如給定序列{ -2, 11, -4, 13, -5, -2 },其最大連續子序列為{ 11, -4, 13 },最大和 
為20。 
在今年的資料結構考卷中,要求編寫程式得到最大和,現在增加一個要求,即還需要輸出該 
子序列的第一個和最後一個元素。


Input
測試輸入包含若干測試用例,每個測試用例佔2行,第1行給出正整數K( < 10000 ),第2行給出K個整數,中間用空格分隔。當K為0時,輸入結束,該用例不被處理。


Output
對每個測試用例,在1行裡輸出最大和、最大連續子序列的第一個和最後一個元 
素,中間用空格分隔。如果最大連續子序列不唯一,則輸出序號i和j最小的那個(如輸入樣例的第2、3組)。若所有K個元素都是負數,則定義其最大和為0,輸出整個序列的首尾元素。 


Sample Input
6
-2 11 -4 13 -5 -2
10
-10 1 2 3 4 -5 -23 3 7 -21
6
5 -8 3 2 5 0
1
10
3
-1 -5 -2
3
-1 0 -2
0


Sample Output
20 11 13
10 1 4
10 3 5
10 10 10
0 -1 -2
0 0 0 (最後一組資料有誤)
*/
#include <iostream> using namespace std; int main() { int a[200] = {0}; // 陣列a記錄整數序列 // count記錄負數個數 // max 最大和 max_f 最大和最前端 max_l最大和最後端 int n, i, j, s, count, max, max_f, max_l; // 以輸入作為迴圈條件實現多組資料的輸入 while(cin>>n) { if( n == 0 ) return 0; // 特殊情況的判斷 count = 0
; for( i = 0; i < n; ++i ) { cin>>a[i]; if( a[i] < 0 ) count++; //記錄負數個數 } if(count == n) { max = 0; max_f = a[0]; max_l = a[n-1]; } // 大多數情況的操作 else { max = a[0];max_f = a[0
];max_l = a[0]; for( i = 0; i < n; ++i ) { //從a[0]開始計算各情況 s = a[i]; // 演算法 可草稿推演 for( j = i+1; j < n; ++j ) { s += a[j]; //尋找最大 if(s>max) { max = s; max_f = a[i]; max_l = a[j]; } } } } // 輸出結果 cout<<max<<" "<<max_f<<" "<<max_l<<endl; } return 0; }

相關推薦

C++ 關於連續序列()問題

/* 江偉浚 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17458 Accept

連續序列/長不下降序列/長公共序列/長迴文

//最大連續子序列和 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 10010; int A[maxn],dp[maxn]; int main(){ int

(4)C語言——求連續序列

log spa clas 最大連續子序列和 alloc 最大 code max 連續 題目: 輸入一組整數,求出這組數字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那個序列。例如: 序列:-2 11 -4 13 -5 -2,則最大子序列和為20。 序列:-

連續序列

運行時 介紹 最大連續子序列和 () vector 運行 n) else 連續子序列和 下面介紹一個線性的算法,這個算法是許多聰明算法的典型:運行時間是明顯的,但是正確性則很不明顯(不容易理解)。 //線性的算法O(N) long maxSubSum4(const vec

動態規劃——連續序列

最大連續子序列和問題如下:       下面介紹動態規劃的做法,複雜度為 O(n)。   步驟 1:令狀態 dp[i] 表示以 A[i] 作為末尾的連續序列的最大和(這裡是說 A[i] 必須作為連續序列的末尾)。   步驟

hdoj1003+codeup2086:Max Sum連續序列問題解法總結

目錄 hdoj 1003求解方法 暴力求解O(n^3)/O(n^2)(不推薦,很可能會超時) 分治法(比較複雜,掌握思想即可) 遍歷求和法O(n) dp動態規劃(強推) codeup2086的求解方法 dp求解 hdoj 1003求解方法 暴力求解

連續序列可能的優解

問題描述: 給定一個整數序列,a0, a1, a2, …… , an(項可以為負數),求其中最大的子序列和。如果所有整數都是負數,那麼最大子序列和為0; 解決這個問題的演算法有很多種,比如兩重迴圈的暴力破解,或者利用分治的思想,但是還有一種線性時間複雜度的演算法:線上處理,可以比較好的解決這

dp經典問題-連續序列 hdu1003

題目描述: 這道題我先後做過三遍,結果每一遍都沒有做出來。今天再仔仔細細的研究了一下,才發現用動態規劃更好理解。 關於求最大連續子序列和的博文轉載如下:https://www.cnblogs.com/coderJiebao/p/Algorithmofnotes27.html 最大連續子序列和的特點就

dp經典問題-連續序列 hdu1003

i++ 最長子序列和 cnblogs ++ n) 代碼 str .com 個數 題目描述: 這道題我先後做過三遍,結果每一遍都沒有做出來。今天再仔仔細細的研究了一下,才發現用動態規劃更好理解。 關於求最大連續子序列和的博文轉載如下:https://www.cnblogs.

Python語言描述連續序列

1.問題描述 假設有一陣列(python裡為list啦)[1,3,-3,4,-6,-1],求陣列中最大連續子序列的和。例如在此陣列中,最大連續子序列的和為5,即1+3+(-3)+4 = 5 2.O(n2)的解法 最簡單粗暴的方式,雙層迴圈,用一個maxsum標識最大連續子序列和。然後

PAT甲級 連續序列

目前PAT甲級中涉及Dijkstra的題目有如下幾題: 最大連續子序列和提供兩種寫法: 1.動態規劃: int a[maxn],dp[maxn];//a[i]存放序列,dp[i]存放以a[i]結尾的連續序列的最大和 dp[0]=a[0]; for(int i=1;i&l

[POJ1050]To the Max (矩陣,連續序列)

資料弱,暴力過 題意 N^N的矩陣,求最大子矩陣和 思路 懸線?不需要。暴力+字首和過 程式碼 //poj1050 //n^4暴力 #include<algorithm> #include<cstdio> #include<cstring>

hdoj Max Sum 連續序列問題

 這個題目是最大連續子序列和的擴充套件,在此基礎上加了起始點和終止點。 (1)終止點的確定,就是每當更新一次Max的值時,更新一下終止點。 (2)起始點的確定,當Thissum<0時,給一個暫時起始點的標記,然後當Max的值更新時,將起始點的值一起更新。 程式

動態規劃(三)長遞增序列LIS、連續序列連續序列乘積

最長遞增子序列LIS 問題 給定一個長度為N的陣列,找出一個最長的單調自增子序列(不一定連續,但是順序不能亂)。例如:給定一個長度為6的陣列A{5, 6, 7, 1, 2, 8},則其最長的單調遞增子序列為{5,6,7,8},長度為4. 最長遞增子序列

連續序列:遞迴動態規劃

問題描述: 給定一個整數序列,a0, a1, a2, …… , an(項可以為負數),求其中最大的子序列和。如果所有整數都是負數,那麼最大子序列和為0; 方法一: 用了三層迴圈,因為要找到這個子序列,肯定是需要起點和終點的,所以第一層迴圈確定起點,第二層迴圈確定終點,第三層

連續序列:動態規劃經典題目(2)

問題描述:       連續子序列最大和,其實就是求一個序列中連續的子序列中元素和最大的那個。       比如例如給定序列:            { -2, 11, -4, 13, -5, -2 }         其最大連續子序列為{

1007 Maximum Subsequence Sum(25 分)【連續序列

題意:求最大連續子序列和並記錄該序列的頭尾元素 #include <bits/stdc++.h> using namespace std; int N; int main() { cin>>N; vector<int>

LeetCode#53暨連續序列問題

這是一道很有意思的演算法題。說它有意思包含了幾個方面的內容:首先,它的直觀上的求解顯而易見、非常容易,但是它的優化求解直到上世紀八十年代才被發現;其次,很多演算法書籍(例如《演算法導論》、《程式設計珠璣

連續序列”、“遞增序列”、“公共序列”、“長公共串”問題總結

一、最大連續子序列和(最大子序列) 最大子序列是要找出由陣列成的一維陣列中和最大的連續子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,達到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。 思路:只要前i項的和還沒有小

動態規劃dp經典題目:連續序列

最大連續子序列和問題         給定k個整數的序列{N1,N2,...,Nk },其任意連續子序列可表示為{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= k。最大連續子序列是所有連續子序中元素和最大的一個,例如給