hdu 1024 滾動陣列優化

2021-07-11 04:28:30 字數 595 閱讀 5621

本題的大致意思為給定乙個陣列,求其分成

m個不相交子段和最大值的問題。

解題思路:dp[i][j]表示前j個數分成i組,且j在第i組裡的最大值。

dp[i][j] = max,前乙個表示j與j-1在i組裡,後乙個表示j單獨成組。

但這道題的n很大,空間複雜度太高,所以要用滾動陣列。

max( dp[i-1][k] ) 就是上一組 0....j-1 的最大值。我們可以在每次計算dp[i][j]的時候記錄下前j個

的最大值 用陣列儲存下來  下次計算的時候可以用,這樣時間複雜度為 n^2.

ac:

#include#include#includeusing namespace std;

const int maxn = 10000005;

const int inf = 0x7ffffff;

int n,m,num[maxn],dp[maxn],pre[maxn];

int main()

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

}printf("%d\n",max);

} return 0;

}

HDU 1024 簡單dp 滾動陣列

要求 n個正數組成的序列,整數範圍 32768 s 32767,1 n 1,000,000,挑出m個無交集的連續子串行使這些序列和最大,並輸出最大值。方法 二維dp 滾動陣列降維。1.dp i j 表示第乙個數到下標為j的數挑出i個連續子串行組成的最大值。2.dp i j max dp i j 1 ...

hdu 1024(滾動陣列的學習)

學習了一下滾動陣列,dp中經常卡記憶體,而利用滾動陣列可以大大節省記憶體空間,不錯哦。1 include2 include3 include4 const int n 1000010 5 const int inf 1000000000 6 using namespace std 78 inta n...

HDU1024 動態規劃 滾動陣列

題目大意 把乙個陣列劃分成不相交的m段,使得這m段之和加起來最大。輸出最大值。這道題從題意的分析可知要使用動態規劃來做 使用arr j 來存放第j個數 dp i j 的含義 在包含arr j 的前提下,前i段的最大值,那麼我們可以分以下兩種情況 解釋一下為什麼第二種情況要使用max dp i 1 k...