01揹包(一般dp實現 樹形dp實現)

2021-10-07 03:30:49 字數 1121 閱讀 9681

一般dp,要遍歷完整個二維陣列。

#include

#include

using namespace std;

int dp[

10000][

10000];

int w[

10000

],v[

10000];

bool chosen[

10000][

10000];

intmain()

for(

int i=

1;i<=m;i++

)else

else}}

}printf

("%d\n"

,dp[m]

[n])

;int j=n,i=m;

while

(j!=0)

j--;}

return0;

}

樹形dp,只會遍歷需要用到的陣列元素,最壞情況與一般dp相等。但一般不會出現最壞情況。所以效率大大優於一般dp。

#include

#include

#include

using namespace std;

int dp[

10000][

10000];

int w[

10000

],v[

10000];

int chosen[

10000][

10000];

intdfs

(int x,

int y)

}int

main()

memset

(dp,-1

,sizeof

(dp));

for(

int i=

0;i<

10000

;i++

)printf

("%d\n"

,dfs

(m,n));

int j=n,i=m;

while

(j!=0)

j--;}

return0;

}

樹形DP一般解題思路

注意先求下屬,再求上司。利用鏈式前向星儲存樹 p1352 沒有上司的舞會 include using namespace std const int maxn 6e3 10 int n,r maxn head maxn int cnt 邊的編號 int d maxn 統計編號節點父節點的個數 int...

樹形揹包DP

include using namespace std const int n 310,m n 2 int h n ne m v m idx int w n int dp n n int n,m void add int a,int b void dfs int u for int j m j 0 ...

揹包dp之01揹包

現在我們有n個配件,他們有不同的價值.但是我們揹包的容量是有限的,因為我們只有乙個一級包,所以我們最多可以裝v重量的東西.但是為了能更好的吃到雞 不存在的 我們要攜帶更有價值的配件,請問我們最多能拿多少價值的配件來當快遞員呢?輸入的第一行是t,表示有一共要打t場比賽.每組資料由三行組成.第一行包含兩...