nssl1196 摘果子 樹形依賴揹包,dp

2021-08-29 11:58:58 字數 832 閱讀 7025

有n個東西,每個東西有價值和**,然後要求乙個**上限,和除了第乙個東西以外都有乙個買這個之前必須要買的東西。

求最大價值

我們考慮之前的樹形揹包

然後發現時間複雜度o(n

3)

o(n^3)

o(n3

),之後我們考慮乙個方法

之前是將子節點合併起來所以時間會很久,可是我們可以將乙個子節點處理好,然後直接仍給它的下乙個兄弟,這樣就可以o(n

2)

o(n^2)

o(n2

)解決這個問題

#include

#include

#define n 2010

using

namespace std;

struct nodea[n*2]

;int n,m,dfn[n]

,size[n]

,ls[n]

,f[n]

[n],tot,cnt,v[n]

,p[n]

,x,y;

void

addl

(int x,

int y)

void

dfs(

int x,

int fa)

//計算dfs序和子樹大小

}int

main()

dfs(1,

0);for

(int i=n;i>=

1;i--

)printf

("%d"

,max(0

,f[1

][m]))

;}

洛谷 1196 題解

有30000 30000 3000 0個佇列,初始每個佇列裡有元素1,2 3 30000 1,2,3 cdots 30000 1,2,3 3000 0。兩種指令 1.m mmi iij jj 編號為i ii的佇列整個接到jjj上 2.c cci iij jj 問編號為i ii,j jj的兩個點之間 ...

nssl 1336 膜拜神牛

d es crip tion description descri ptio n 給定長度為n nn的序列a aa和b bb,若滿足ai aj a i geq a j ai aj 且bi b jb i leq b j bi bj 則i,ji,j i,j互相膜拜,求最大的互不膜拜集合 資料範圍 n 1...

nssl1476 聯 線段樹

無限長的01 0101 序列,每次進行乙個操作 區間內賦值為0 00區間內賦值為1 11區間取反 求第乙個0 00的位置 離散化 儲存每個區間的左右端點和他們加一之後的值 後可以用線段樹儲存第乙個0 00和第乙個1 11的位置。然後區間取反時就交換兩個值並且讓laz ylazy lazy 標記同樣取...