2維表table[i][j] 表示將序列a1,a2,a3,...中的包含aj在內的j 個數分成i段,能得到的最大值。
so, table[i][j] = table[i][j-1] + aj , 表示aj 與aj-1 同屬同一段。
若aj與aj-1不再同一段, 則 table[i][j] = max(table[i-1][k]) + aj , (i-1<=k求table第i行只需要用第i-1行,所以用動態陣列來節省空間。
#includeusing namespace std;
const int m = 1000000;
long tmp[2][m];
int a[m];
inline long max(long &a ,long &b)
int main()
for(int i = n-m; i < n ; i ++)
for(int i = 0 ; i < m ;i++) // i=0 的時候表示的是分1塊的情況。
else
for(int j = i + 1 ; j <= n-m+i ; j++)
t = 1 - t;
}t = 1 - t;
res = -32768*m;
for(int i = m-1 ; i < n ; i ++)
cout << res << endl;
}return 0;
}
HDU 1024 新最大子串行和 DP
題意是要在一段數列中求 m 段互不重合的子數列的最大和。動態規劃,用陣列 num 儲存所給數列,建二維陣列 dp dp i j 表示當選擇了第 j 個數字 num j 時,前 j 個數字被分成 i 組的所得最大和。那麼這個最大和等於 max 即 dp i j max dp i j 1 dp i 1 ...
最大子串行
模板 int maxsubsequence const int a,int n return maxsum 複雜度on 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和 為20。在今年的資料...
最大子串行
最大子串行是要找出由數組成的一維陣列中和最大的連續子串行。比如的最大子串行就是 它的和是8,達到最大 而 的最大子串行是,它的和是6。你已經看出來了,找最大子串行的方法很簡單,只要前i項的和還沒有小於0那麼子串行就一直向後擴充套件,否則丟棄之前的子串行開始新的子串行,同時我們要記下各個子串行的和,最...