最大子列和問題

2021-09-21 18:20:11 字數 1588 閱讀 5849

給定乙個數列,其中可能有正數也可能有負數,我們的任務是找出其中連續的乙個子數列(不允許空序列),使它們的和盡可能大。

/*演算法一*/ 

int maxsubseqsum1(int a, int n)

if(thissum > maxsum)

} //j迴圈結束

} //i迴圈結束

return maxsum;

}

/*演算法二*/ 

int maxsubseqsum2(int a, int n)

} //j迴圈結束

} //i迴圈結束

return maxsum;

}

/*演算法三:分治法*/ 

/*返回三個整數的最大值*/

int max3(int a, int b, int c)

/*分治法求list[left]到list[right]的最大子列和*/

int divideandconquer(int list, int left, int right)

/*「分」的過程 */

center = (left + right) / 2; //找到中分點

maxleftsum = divideandconquer(list, left, center); //遞迴求左子列和

maxrightsum = divideandconquer(list, center + 1, right); //遞迴求右子列和

/*求跨分界線的最大子列和*/

maxleftbordersum = 0;

leftbordersum = 0;

for(i = center; i >= left; i--) //左邊掃瞄結束。

maxrightbordersum = 0;

rightbordersum = 0;

for(i = center + 1; i <= right; i++) //右邊掃瞄結束。

/*返回「治」的結果*/

return max3(maxleftsum, maxrightsum, maxleftbordersum + maxrightbordersum);

}/*此函式用於保持介面相同*/

int maxsubseqsum3(int list, int n)

int maxsubseqsum4(int a, int n)

return maxsum;}

最後,寫乙個主函式進行測試,第1行輸入正整數n;第2行給出n個整數,其間以空格分隔。

#include #define max 100000    

int main() ;

scanf("%d", &n);

for ( i = 0; i < n; i++ )

scanf("%d", &a[i]);

printf("%d", maxsubseqsum1( a, n ));

return 0;

}

最大子列和問題

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入格式 輸入第1行給出正整數 k 100000 第2行給出k個整數,其間以空格分隔。輸出格式...

最大子列和問題

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入格式 輸入第1行給出正整數 k 100000 第2行給出k個整數,其間以空格分隔。輸出格式...

最大子列和問題

給出乙個序列,求出最大子列和。演算法一 long maxsum int a,int n return maxsum 這是乙個窮舉的演算法,有三個巢狀的for迴圈,時間複雜度為o n 3 在計算的時候有很多不必要的重複項,例如當i 0,j 3時,和的計算為 a 1 a 2 a 3 當i 0,j 4時,...