其實是很簡單的題,一開始想的有點麻煩了。。
一開始是這麼想的。。: f(
k,n)
=∑i=
3n(n
−1i−
1)(i
−1)!
f(k−
1,n−
i)=∑
i=3n
(n−1
)!(n
−i)!
f(k−
1,n−
i) f
(k,n
)n!=
1n∑i
=3nf
(k−1
,n−i
)(n−
i)!
就是列舉第乙個人所屬的環長。。
但是其實不用這樣。。。 f(
k,n)
=(n−
1)(n
−2)f
(k−1
,n−3
)+(n
−1)f
(k,n
−1)
第一種情況是新建乙個環,或者是加入到已有的環中。
**:#include
#include
using namespace std;
typedef long long ll;
const int n=3000+5;
ll f[n][n];
int main()
cout《總結:
①對於這種類似n個球m個箱子的。。可以列舉最後乙個球,也可以列舉最後乙個箱子。
JSOI2013 旅行時的困惑
傳送門 由於我們的圖不僅是乙個 text 而且在形態上還是一棵樹,也就是說我們為了實現節點之間互相可達,就必須把每條邊都覆蓋一次,因為兩個點之間的路徑是唯一的。那麼題意就變成了 每次在圖上選出一條路徑,覆蓋上面的邊,求最小的路徑數使得所有邊都被覆蓋至少一次。看到這裡我不禁聯想起這道題 那麼對於這道題...
JSOI2013 快樂的 JYY 題解
題面傳送門 我們一句話題意 求兩個字串的公共回文子串的數量 首先對於每個串構造乙個回文自動機,然後由pam的定義可知 對於pam上從根節點轉移方式相同所到達的點代表的回文串是相同的 這樣對於兩個pam同時dfs,每次dfs到的節點的數值 在其原串中的出現數量 相乘,然後累加到答案裡 注意 要從偶原點...
題解 JSOI2013 旅行時的困惑
首先我們要思考乙個問題,公交線路要加到什麼程度才能夠使得任意兩個點兩兩可達 很容易知道每個點和他的父親必須兩兩可達 所以最終所有公交線路新增的邊其實就是把原來的邊全部反向 那麼這些邊要如何組成公交線路呢,必須要滿足,在這條公交線路中,邊的指向相同,要麼都向上,要麼都向下,或者原來向上,在某個點轉成向...