杭電4501 三維dp

2022-08-17 07:18:16 字數 756 閱讀 2829

這到題可以算乙個三維的揹包吧 ,之前把題義理解錯了~以為以0積分或0錢那的就算免費的 原來不是~~可以拿任意價值的。

看了別人的**也學到了一點小技巧,比如dp[i][j]=max(dp[i-1][j],dp[i-1][j-c[i]])(這不是這道題的轉移方程) 如果用滾動陣列要注意內迴圈的順序,但不用滾動陣列會浪費空間

所以可以這樣dp[2][j]  通過^進行 dp[now][j=max(dp[now^1][j],dp[now^1][j-c[i]]),  這樣可以儘量減少空間複雜度,又可以不用考慮迴圈順序。。

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6const

int n = 110;7

8int dp[2][n][n][7];9

intc1[n], c2[n], val[n];

10int

main()

1119 memset(dp, 0, sizeof

(dp));

20int now = 0;21

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

2238}39

}40}41 printf("

%d\n

", dp[now][v1][v2][k]);

42}

43return0;

44 }

杭電60道DP問題總結(三)

接著前兩篇,還是5道一貼吧。proid 1159 common subsequence 題目意思很簡單,是個最基本的dp,任何一本演算法書都會講這個題目,最長公共子串行。狀態轉移方程,dp i j dp i 1 j 1 1 when str i str j max dp i 1 j dp i j 1...

hdu4433 三維DP,後效性

題意 給你個長度為n的數字串,每次最多旋轉三個數字,至少經過都少部才能到達目標串。思路 一開始我也是用dp做的,但是沒考慮到後效性,所以wa了。後來看了題解,思路是這樣的dp i j k 表示第i為匹配好,第i 1位增加了j,第i 2增加了k。狀態轉移 第i 2位增加k x,第i 3位增加y,然後還...

poj1185 三維狀壓dp

description 司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地 用 h 表示 也可能是平原 用 p 表示 如下圖。在每一格平原地形上最多可以布置一支炮兵部隊 山地上不能夠部署炮兵部隊 一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區...