學習了一下滾動陣列,dp中經常卡記憶體,而利用滾動陣列可以大大節省記憶體空間,不錯哦。
1 #include2 #include3 #include4const
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...