POJ 3761 (組合計數)

2021-07-15 12:27:40 字數 947 閱讀 4011

氣泡排序一輪: 相鄰之間的兩個數比較, 然後交換。

現在給你乙個有序的數列, 從 1 - n;而且是經過 k 輪交換得來的。

問你有多少個這樣的數列。

對於乙個數列, 我們是有乙個反序表的 ai, 反序表中的 ai 表示 i 左邊有多少比 i 要大的數的個數。可以很容易得到反序表 和 原序列是一一對應的。

而經過氣泡排序的一輪, 是可以發現把 反序表中大於0 的數都減一的。所以剛好 k 輪冒泡就是其反序表的 ai 的 max 是 k。現在就是來設計 反序表了。

反序表的 ai 值是在 [0, n-i] 的。則 i >= n-k 時, 這些值的設計方案有 (k+1)!種, 當 i < n-k 時, 有 (k+1)^ (n-k-1)種方案, 則共有方案為

k! * (k+1)^(n-k)種, ---最大值是 k 的個數--> f(k) 。

而我們是要求 至少有乙個 k 的方案,則可以 f(k)- f(k-1)即可得到答案了。

//#include 

#include

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

using

namespace

std;

const

int maxn = 1e6 + 131;

typedef

long

long ll;

typedef

unsigned

long

long ull;

const ll mod = 20100713;

ll kj[maxn];

ll powmod(ll a, ll n)

return ret;

}int main()

return

0;}

組合計數(初步)

組合數學主要是研究某組離散物件滿足一定條件的安排的存在性 構造及計數等問題。組合計數理論是組合數學中乙個最基本的研究方向,主要研究滿足一定條件的安排方式的數目及其計數問題。本課程主要介紹組合數學中常見的和重要的一些計數原理 計數方法和計數公式,包括一般的排列 組合的計算以及生成函式 容斥原理 反演原...

組合計數小啟發

在dp的領域中還有的很大一部分就是組合計數。以前做了fhq在集訓隊作業中的 連邊 這道題,大概就是要你給乙個圖連邊是的若干個點度數為奇數。比較容易發現是一道dp題,但是怎樣保證狀態不重不漏?常用的方法就是增維,比如按照排序大小擴充套件啦,按照字典序擴充套件啦從而使得狀態不重,但是還有兩種方法可以使得...

組合計數筆記

ck n n k n k ck n ck n 1 ck 1 n 1 ck 1 n n kk 1 ckn n個數進行排列,每個數都不在自己的位置上的方案數 dn n 1 dn 1 dn 2 推導 對於第 n 個數,不放在 n位置,一共有 n 1 種情況 第 n 個數放定後,假設放在 k上,考慮第 k ...