hdu 1024(滾動陣列的學習)

2021-09-06 08:32:25 字數 686 閱讀 3809

學習了一下滾動陣列,dp中經常卡記憶體,而利用滾動陣列可以大大節省記憶體空間,不錯哦。

1 #include2 #include3 #include4

const

int n=1000010;5

const

int inf=1000000000;6

using

namespace

std;78

inta[n];

9int dp[n],pre[n];//

dp[i][j]表示第j個數前組成i組的最大值;

10//

為了節省記憶體,可以用pre[j]來儲存前一次求得的dp[j-1]的最大值,這樣相當於陣列在不斷進行滾動

11//

最後輸出temp即可;

1213

intmain()

19 memset(dp,0,sizeof

(dp));

20 memset(pre,0,sizeof

(pre));

21int

temp;

22for(int i=1;i<=m;i++)29}

30 printf("

%d\n

",temp);31}

32return0;

33 }

hdu 1024 滾動陣列優化

本題的大致意思為給定乙個陣列,求其分成 m個不相交子段和最大值的問題。解題思路 dp i j 表示前j個數分成i組,且j在第i組裡的最大值。dp i j max,前乙個表示j與j 1在i組裡,後乙個表示j單獨成組。但這道題的n很大,空間複雜度太高,所以要用滾動陣列。max dp i 1 k 就是上一...

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 ...

HDU1024 動態規劃 滾動陣列

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