洛谷P3698 小Q的棋盤

2021-09-28 20:37:15 字數 2944 閱讀 7129

傳送門 to luogu

思路一:動態規劃

好像是個樹形 d

p\tt

dp,甚至挺板?

f (x

,y,0

/1)f(x,y,0/1)

f(x,y,

0/1)

表示從 x

xx 點開始往子樹走 y

yy 步,是否 (0/

1)(0/1)

(0/1

) 回到 x

xx ,最多經過的節點數量。

大可以把這玩意兒當做揹包

不回來,最後是走到了子樹 u

uu 裡面。f(x

,y,0

)=f(

u,v,

0)+f

(x,y

−v−1

,1)f(x,y,0)=f(u,v,0)+f(x,y-v-1,1)

f(x,y,

0)=f

(u,v

,0)+

f(x,

y−v−

1,1)

。不回來,中途在子樹 u

uu 裡面轉了一圈。f(x

,y,0

)=f(

u,v,

1)+f

(x,y

−v−2

,0)f(x,y,0)=f(u,v,1)+f(x,y-v-2,0)

f(x,y,

0)=f

(u,v

,1)+

f(x,

y−v−

2,0)

。回來。f(x

,y,1

)=f(

u,v,

1)+f

(x,y

−v−2

,1)f(x,y,1)=f(u,v,1)+f(x,y-v-2,1)

f(x,y,

1)=f

(u,v

,1)+

f(x,

y−v−

2,1)

。 **一:動態規劃

#include

#include

#include

using

namespace std;

const

int maxn =

100;

int n, movement; vector<

int> g[maxn]

;int dp[maxn]

[maxn+1]

[2];

// dp[0]: not come back

void

getdp

(int x,

int pre)}}

for(

int i=

1; i<=movement;

++i)

}int

main()

getdp(0

,-1)

;printf

("%d\n"

,dp[0]

[movement][0

]);return0;

}

思路二:貪心

說實話看到這個貪心吊打正常 dp 我也很吃驚。

部分思路來自洛谷題解(但是趕腳講的不是很清楚?),證明一下這 該死的 演算法:

就是 ↑

\uparrow

↑ 這兩種方案。

發現最優時答案等於步數加一。那麼左邊那種浪費了很多步,右邊那種浪費了很少的步數。

再考慮這個點的父節點——要是它的父節點要求它回家,那麼這裡省下來的步數沒有任何的屁用!

說白了就是,乙個父節點只能選乙個子節點作為「省步」者

將子樹中最多能省下的步數寫成乙個函式 s(x

)=2∣

x∣−r

s(x)=2|x|-r

s(x)=2

∣x∣−

r ,其中 ∣x∣

|x|∣x

∣ 是走過的點數,r

rr 是實際花費的步數。明顯 s(x

)s(x)

s(x)

越大越好。

邊界是 s(x

)=2(

x∈f)

s(x)=2(x\in \mathbb)

s(x)=2

(x∈f

) ,這裡 f

\mathbb

f 是葉子節點點集。狀態轉移為 s(x

)=max⁡v∈

sonx

[s(v

)+1]

s(x)=\max_\left[s(v)+1\right]

s(x)=v

∈son

x​max​[s

(v)+

1]

解釋:如果走到乙個兒子的子樹,但最終走回 x

xx ,那麼一條邊將被訪問兩次,故貢獻為零。v

vv 則是一去不回。加的這個 1

11 是因為多走了乙個點(即 x

xx 本身),但只多走了一步(從 x

xx 到 v

vv 一步)。根據 2∣x

∣−r2|x|-r

2∣x∣−r

可得。

這不就是長鏈剖分嗎(或者說最大深度)?所以一定是沿著最長鏈走到黑

其他節點只能去了又回來,平均每個點花費兩步。

**二:咕咕咕

你點一下超連結要死啊?

#include

intmain()

洛谷 P3956 棋盤

js省裡冬令營夏令營講深搜都講到了 今天上午測試的題,15分,因為剪枝沒剪乾淨,少了個等於號,於是本來能拿到的分也沒拿到,唉 主要思想dfs 剪枝 include using namespace std int m,n 依照題目 int a 107 107 存顏色 int vis 107 107 存...

洛谷 P3956 棋盤

找了找發現這週做的竟然都是水題,那麼就把不知道多久以前的一道水題發出來吧。p3956 棋盤 有乙個m m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。...

小Q的棋盤 貪心

洛谷傳送門 顯然這是一棵樹 這個就不多bb了,樹的性質 很容易發現乙個性質,如果一條鏈走完,我們必須回頭再走一次那條鏈 或一部分 才可以走到更多的點 所以為了減少這個損失,我們以最長鏈 從起點開始的最長鏈 的終點 最低端 為終點 步數走完不須回頭 既然做到減少了最多的不必要,那麼這樣一定會是最優的。...