01揹包一維dp陣列的實現

2021-06-28 14:58:11 字數 998 閱讀 5455

二維的01揹包模板

#include 

#include

#include

using namespace std;

const int maxw = 10000;

const int maxn = 100;

int n,w;

int w[maxw+2],v[maxn+2],dp[maxn+2][maxw+2];

int main()

}printf("%d\n",dp[n][w]);

return 0;

}

用一維dp陣列優化空間複雜度

#include < cstdio >

#include < iostream >

#include < cstring >

using

namespace

std;

const

int maxw = 10000;

const

int maxn = 100;

int n,w;

int w[maxw+2],v[maxn+2],dp[maxw+2];

int main()

}printf("%d\n",dp[w]);

return

0;}

其中第二個迴圈一定要逆序,這是因為,

「當轉移方程中,這一層的狀態完全由上一層的狀態組成」

「就是dp[j-w[i]] +v[i]就是把i這個物體取了「

」所以可以由上一層的j-w[i]加上v[i]轉移到這一層的j「

(by藍神)。

也就是說,max裡面的dp[j] 是上一層的 dp[j-w[i]]也是上一層的,用上一層費用用j的價值量和上一層費用為j-w[i] (也就是未取第i個時)的價值量加上這一層第i個之後的價值量之和的最大值來更新dp[i],達到滾動陣列的目的。

一維dp陣列01揹包

有n件物品和乙個最多能被重量為w 的揹包。第i件物品的重量是weight i 得到的價值是value i 每件物品只能用一次,求解將哪些物品裝入揹包裡物品價值總和最大。這是標準的揹包問題,以至於很多同學看了這個自然就會想到揹包,甚至都不知道暴力的解法應該怎麼解了。這樣其實是沒有從底向上去思考,而是習...

小梁的揹包(01揹包 一維陣列)

時間限制 c c 2秒,其他語言4秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 小梁來到了伽勒爾地區並參加了聯盟賽熱身賽,比賽小島上有n個精靈散落在島上各處,她有乙個大小為s的揹包,每個精靈的戰鬥值為vi 體積為wi 請問在她臨走之前...

0 1揹包使用一維陣列

使用滾動陣列將空間優化到了2 v,在揹包九講中提到了使用一維陣列也可以達到同樣的效果,個人認為這也是滾動思想的一種,由於使用一維陣列解01揹包會被多次用到,完全揹包的一種優化實現方式也是使用一維陣列,所以我們有必要理解這種方法。如果只使用一維陣列f 0 v 我們要達到的效果是 第i次迴圈結束後f v...