# Dynamic Programming# Greedy# Array

d784 - 一、連續元素的和

🔗 前往 ZeroJudge 原題

題目描述

題目要求找出一個整數數列中,連續元素的和的最大值。輸入包含多組測試資料,每組資料包含數列長度 nn 個整數。對於每組資料,輸出數列中連續元素的和的最大值。

解題思路

這題可以使用動態規劃 (Dynamic Programming) 或貪心算法 (Greedy Algorithm) 解決。程式碼採用了類似動態規劃的思路,但實現方式較為直接。外層迴圈遍歷數列的起始位置 i,內層迴圈遍歷數列的結束位置 j。對於每個起始位置 i,計算從 ij 的連續元素和,並更新 ans[i] 為目前找到的最大值。最後,遍歷 ans 數組,找出全局最大值。

複雜度分析

  • 時間複雜度: O(n^2)
  • 空間複雜度: O(n)

程式碼

#include <iostream>
using namespace std;
int main(){
	int a;
	cin >> a;
	while(a--){
		int b,max=-10000;
		cin >> b;
		int c[b+1]={0},ans[b+1]={0};
		for(int i=0;i<b;i++){
			cin >> c[i];
			ans[i]=-10000;
		}
		for(int i=0;i<b;i++){
			for(int j=i+1;j<=b;j++){
				if(c[i]>ans[i])
					ans[i]=c[i];
				c[i]+=c[j];
			}
		}
		for(int i=0;i<b;i++){
			if(ans[i]>max)
				max=ans[i];
		}
		cout << max << "\n";
	}
}

Discussion