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