P1270 「訪問」美術館

2022-06-02 04:48:10 字數 765 閱讀 1045

題意:給出一顆樹形圖,每一條邊都有一定權值,葉子節點裡面有若干副畫

現在有乙個小偷要進去偷畫,每一條邊的權值就是走的時間,偷畫需要5秒

給出警察到來時間,問最多能偷多少副畫  

思路:這是一道樹形dp

我們遍歷每個節點,從根節點dfs到葉子節點,那麼如何進行狀態轉移呢

我們用乙個dp【i】【j】表示在i節點花掉j時間能偷到的最多的畫

那麼我們在計算某個節點能夠偷到畫的數量的時候  

先把走廊的時間算上去,假如走廊需要走5秒,那麼我們就需要10秒(來回走)

然後就開始列舉在這個節點的時候,花掉k時間能過拿到最多的畫的數量

然後遇到有分岔路的乙個節點的時候,我們就需要列舉這兩邊,花掉k時間能過拿到最多的畫的數量

那麼如何求呢?同樣我們得先算上走廊的時間再進行列舉

假如到了根節點位置,走廊來回走花了10秒,那麼我們在算花55秒能夠偷到畫的最多數量的時候,就只能用45秒

然後逐一列舉時間即可

1 #include2

using

namespace

std;

3const

int maxn=1e3+10;4

intdp[maxn][maxn];

5int cnt=0;6

intn;

7void

dfs()818

}19else27}

28}29}

30int

main()

31

view code

P1270 「訪問」美術館

p1270 訪問 美術館 一開始以為只是一棵普通樹,後來才發現題目中寫了每個走廊要麼分叉為兩條走廊,要麼通向乙個展覽室,是一棵二叉樹,可以直接用陣列表示。輸入是按照dfs序給出的,可以直接按照類似於線段樹bulid來建立這棵二叉樹,其中藏畫數不為0的是葉子結點,是遞迴建樹的終點。小偷是要偷畫,最後還...

P1270 「訪問」美術館

一道樹形dp啦 其實我是做過這道題的加強版後才做的這道題 不過先由淺入深,先發這個 首先,我定義 f u i 為在第 u 個點上,給它時間為 i 是能獲取的最大價值。有乙個需要注意,如果說這是乙個展廳,設給這個點的時間為 t 那麼實際能偷畫的時間只有 t 雙倍邊權。這也導致了如果這個點是乙個分支,那...

洛谷P1270 訪問美術館

題目 樹形dp,首先考慮遞迴建圖,類似於線段樹的中序遍歷。然後取狀態dp i j 表示i點花費j時間所偷到的最多的畫,有方程 dp now nwt max dp now nwt dp lso i dp rso nwt i data now t 注意三點 可能一次偷不完所有的畫 來回要路徑花費時間乘二...