hdu 1421 dp 滾動陣列

2022-05-13 18:09:20 字數 1332 閱讀 8442

每個dp 沒個30來分鐘 tm的就寫不出什麼狀態轉移方程  還是太弱了啊=-=

touch   me

其實用滾動陣列 就是看你上乙個狀態轉移到當前狀態 與 i 前面多少個有關係  因為這裡需要用到 i - 2    i - 1那麼其實只要用 i % 3就可以了

像上一題 我們只涉及到 i + 1那麼只需要 % 2就可以了

這只是乙個 大致的方向 具體的操作 其實我們可以根據 簡單的 dp轉移方程來進行滾動 改變

1 #include 2 #include 3 #include 4

using

namespace

std;56

const

int size = 2010;7

intweight[size];

8int dp[size][size/2];9

10int

main()

1120 sort( weight+1 , weight+n+1

);21 memset( dp , 0 , sizeof

(dp) );

22for( int i = 2 ; i<=n ; i++)

2330

}31 cout << dp[n][k] <

33return0;

34 }

view code

1 #include 2 #include 3 #include 4

using

namespace

std;56

const

int size = 2010;7

intweight[size];

8int dp[3][size/2];9

10int

main()

1120 memset( dp , 0 , 3*(k+2)*sizeof(int

) );

21 sort( weight+1 , weight+n+1

);22

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

2330

}31 cout << dp[n%3][k] <

33return0;

34 }

view code

cf掉了 好多分啊啊啊啊=-=

today:

好的時光是哪一段並無太大意義

因為所有的時光都是被辜負被浪費的

也只有在辜負浪費之後

才能從記憶裡將某一段拎出

拍拍上面沉積的灰塵

感嘆它才是最好的時光

hdu 5119 滾動陣列dp

題意 現在乙個人有n個朋友,它的每個朋友都有乙個值,它每次可以選擇一些朋友的值然後將它們異或起來,如果最後的異或和大於等於m的話,那麼這個人就贏了。問,這個人有幾種贏的方法。思路 求有幾種方法的題目都可以用dp來思考。dp i j 前i個人異或和為j有幾種方法。由於直接開40個人會mle,所以只能用...

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 1421 搬寢室 dp問題

以前雖然寫過dp問題,但思想上過不去,覺得dp跟遞迴似乎是一樣的,今天寫過這道題後才頓悟 dp與遞迴不是一樣的。狀態方程dp n k min dp n 1 k dp n 2 k 1 w i w j 2 唉,終於發現思想上有所改變了,不過 實現能力不足,在對dp陣列初始化的問題上浪費了n多精力和時間 ...