有一顆樹,有k種不同顏色的染料給樹染色。乙個染色方案是合法的,當且僅當對於所有相同顏色的點對 (x,
y)
(x,y)
(x,y),x
xx 到 y
yy 的路徑上的所有點的顏色都要與 x
xx 和 y
yy 相同,請統計方案數
易得乙個節點要麼塗和父節點乙個顏色,要麼塗沒有出現過的顏色
假設我們遍歷到了第 x
xx 個點已經用了 y
yy 個顏色了
如果要塗和父節點乙個顏色,那麼方案數就是前 x−1
x-1x−
1 個點用了 y
yy 個顏色的方案數
如果要塗和父節點不同顏色,那麼方案數就是前 x−1
x-1x−
1 個點用了 y−1
y-1y−
1 個顏色的方案數 ∗(k
−(y−
1)
)*(k-(y-1))
∗(k−(y
−1))
我們發現方案數跟樹長什麼樣並沒有關係,我們完全可以轉化為乙個線性結構求解
設 f [i
][j]
f[i][j]
f[i][j
] 為前 i
ii 個節點用了 j
jj 個顏色:
f [i
][j]
=f[i
−1][
j]+f
[i−1
][j−
1]∗(
k−i+
1)
f[i][j]=f[i-1][j]+f[i-1][j-1]*(k-i+1)
f[i][j
]=f[
i−1]
[j]+
f[i−
1][j
−1]∗
(k−i
+1)
#
include
using
namespace std;
typedef
long
long ll;
const
int mod=
1e9+7;
ll f[
400]
[400];
intmain()
ll res=0;
for(
int i=
1;i<=k;i++
) res=
(res+f[n]
[i])
%mod;
cout
}
牛客練習賽1 B 樹題解
演算法分析 解題 shy有一顆樹,樹有n個結點。有k種不同顏色的染料給樹染色。乙個染色方案是合法的,當且僅當對於所有相同顏色的點對 x,y x到y的路徑上的所有點的顏色都要與x和y相同。請統計方案數。第一行兩個整數n,k代表點數和顏色數 接下來 n 1 行,每行兩個整數 x,y 表示 x 與y之間存...
新生練習賽1 B
acm的學長最近在henu附近supermarket打工。一天之中,他的工作時間是l分鐘。這位學長記性非常好,他已經記住了n位老客戶,其中第i位顧客是在一天開始工作後的ti分鐘到來,並且服務這位顧客需要花費li分鐘。此外當學長為另一位客戶提供服務時,保證不會有任何客戶到達。然鵝,學長想要想要在忙碌中...
牛客練習賽1
a矩陣 題意 給出乙個n m的矩陣。讓你從中發現乙個最大的正方形。使得這樣子的正方形在矩陣 現了至少兩次。輸出最大正方形的邊長。n 500,m 500 題解 考慮暴力 列舉每個矩陣為 n 3 然後判斷兩個矩陣是否相等 n 2 顯然複雜度 如果將矩陣進行hash 然後o 1 判斷兩個矩陣是否相等,那麼...