最小m子段和問題 C語言 動態規劃

2021-09-22 01:52:50 字數 795 閱讀 8610

題目描述

給定n個整數組成的序列,現在要求將序列分割為m段,每段子序列中的數在原序列中連續排列。 如何分割才能使這m段子序列的和的最大值達到最小?

解題思路

用dp[i][j]儲存長度為i,分j段後其子序列和的最大值的最小值,那麼它由兩部分構成:

當j=1時,dp[i][1]表示的是長為i的整個序列的和;

當j>1時,dp[i][j] = min(for(k=1; k<=i; k++)max(dp[k][j-1], dp[i][1] - dp[k][1]));

具體**實現

#include #include#define max_value 32767

int dp[100][100] ; //dp[i][j]儲存0~i的j個分組的和的最大值的最小值

int max(int n1,int n2)

void calculate(int a,int n,int m)

for(int i=1;i<=n;i++)

}dp[i][j]=min;

} }printf("%d",dp[n][m]);

}void dp_test_printf(int n,int m)

printf("\n"); }}

int main()

calculate(a,n,m);

// dp_test_printf(n,m);

return 0;

}

最小m子段和(動態規劃)

問題描述 給定n個整數組成的序列,現在要求將序列分割為m段,每段子序列中的數在原序列中連續排列。如何分割才能使這m段子序列的和的最大值達到最小?輸入格式 第一行給出n,m,表示有n個數分成m段,隨後一行給出n個數,以空格分隔 輸入樣例 9 39 8 7 6 5 4 3 2 1 輸出樣例 解釋 9 8...

動態規劃 最大m子段和

繼最大子段和在空間上的推廣,那麼再來看看她在個數上的延伸。最大子段和就是最大m子段和問題在m 1時的特殊情況 類似最大欄位和中的b j 這裡假設b i,j 表示陣列a的前j項中i個子段和的最大值,且第i個子段含a j 其中b i,j 1 a j 表示第i個子段含a j 而 初始時b 0,j 0,0 ...

動態規劃 最大m子段和

在最大m子段和問題中,要求取m個互不相交子段,和為最大值。最大m子段和問題是最大子段和在子段個數上的推廣,最大子段和問題是m 1的特殊情況。在這個問題中,我們使用乙個矩陣b i j 他表示的意義是在前 j 項中被分為 i 段的最大 i 子段和。首先,既然是前 j 項需要分為 i 段,所以當 i j ...