傳送門 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
)=maxv∈
sonx
[s(v
)+1]
s(x)=\max_\left[s(v)+1\right]
s(x)=v
∈son
xmax[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了,樹的性質 很容易發現乙個性質,如果一條鏈走完,我們必須回頭再走一次那條鏈 或一部分 才可以走到更多的點 所以為了減少這個損失,我們以最長鏈 從起點開始的最長鏈 的終點 最低端 為終點 步數走完不須回頭 既然做到減少了最多的不必要,那麼這樣一定會是最優的。...