Jsoi2013 遊戲中的學問 解題報告

2021-07-22 15:49:28 字數 758 閱讀 4771

其實是很簡單的題,一開始想的有點麻煩了。。

一開始是這麼想的。。: 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 旅行時的困惑

首先我們要思考乙個問題,公交線路要加到什麼程度才能夠使得任意兩個點兩兩可達 很容易知道每個點和他的父親必須兩兩可達 所以最終所有公交線路新增的邊其實就是把原來的邊全部反向 那麼這些邊要如何組成公交線路呢,必須要滿足,在這條公交線路中,邊的指向相同,要麼都向上,要麼都向下,或者原來向上,在某個點轉成向...