一般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場比賽.每組資料由三行組成.第一行包含兩...