這到題可以算乙個三維的揹包吧 ,之前把題義理解錯了~以為以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 5using
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 表示 如下圖。在每一格平原地形上最多可以布置一支炮兵部隊 山地上不能夠部署炮兵部隊 一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區...