P2817 宋榮子的城堡

2022-03-09 07:43:09 字數 1597 閱讀 3631

p2817 宋榮子的城堡

一道找規律的題,現在深入追究發現了有趣的東西。

1 12 2

3 94 64

顯然k^(k-1) 在日照的時候也推出來了。

3 9今天推錯了,要列出所有的情況,然後再選,否則會漏掉。

答案是(k^(k-1)) * ((n-k)^(n-k))

對了,我卡速公尺一直打的是錯的。要對指數為0的情況特判,不然會死迴圈。

現在,告訴我,why?

cayley定理(凱萊定理)

對於有n個節點,生成樹的方案有多少種?

答案是n^(n-2)

推導過程如下:

k表示現在有多少子樹

顯然初始時,k==n

現在從n個節點中任選1個,有c(n 1)種可能,再從不包含這個節點的子樹中選1個子樹和這個節點連起來,有c(k-1 1),然後子樹減少乙個。重複這個過程直到,子樹只剩1個,乘法原理,(n^(n-1))*(n-1)!。

假定每次都是(從n個節點中任選1個)選的同乙個,並把它設成根,想象一下,對於同一棵樹這就考慮了每個節點是根的情況。

有n-1條邊,不考慮加進來的順序,所以再除(n-1)!,現在成了n^(n-1),在一棵樹中,根節點是哪個都無所謂,再除n,就成了

n^(n-2)。

但是對於這個題而言,可以假定1連向的點為根節點,實際上把它的每個點當成根節點都會形成新的方案,所以再*k

故答案 k^(k-1)

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

#define mod 1000000007

9#define inf 2147483647

10#define for(i,a,b) for(register long long i=a;i<=b;i++)

11#define p(a) putchar(a)

12#define g() getchar()

13//

by war

14//

2017.10.19

15using

namespace

std;

16long

long

n,k;

17void

in(long

long &x)

1827

while(c<='

9'&&c>='

0')x=x*10+c-'

0',c=g();

28 x*=y;29}

30void o(long

long

x)31

37if(x>9)o(x/10

);38 p(x%10+'0'

);39}40

41long

long pow(long

long a,long

long

b)42

51long

long r=1;52

while(b>0)53

59return

r;60}61

62int

main()

63

view code

P2816 宋榮子搭積木

描述 考慮我們已經堆好了3列積木,現在來了乙個新積木 我們該把它放在哪一列呢?堆在上面是不好考慮的,因為我們不知道下面的積木是不是承受的了重量 所以我們考慮每次把新來的積木放在每一列的最下面 在放的下的前提下,我們盡量放在積木數最多的那一列下 因為後續的積木可能不能放在這一列 承受重量屬性比較低 比...