玩具有很多不同的種類,每種玩具有很多歌,相同種類的兩個玩具是無法區分的。
我們現在想知道總共有幾個玩具。我們已知,如果在所有玩具中選擇一些不同的玩具,可以玩 \(n\) 天,即任意兩天選擇的玩具中都存在任意一種玩具的數量不同,注意選擇空集也是允許的。
輸入僅包含乙個正整數 \(n\)。
如果各種物品的數量分別為 \(c_1,c_2,...,c_k\),那麼可以選擇的方案數顯然是在每種物品中選擇乙個個數,即 \((c_1+1)(c_2+1)...(c_k+1)\)。現在問題是反過來的,給定了方案數,因此我們考慮對這個數字作分解即可。
考慮對於 \(n\) 的所有的拆分,假設有一種拆分為 \(a_1 \cdot a_2 \cdot ... \cdot a_k\),那麼很顯然 \(a_1-1,a_2-1,...,a_k-1\) 可以是答案之一,我們計算出這種方案的數目,然後扔進set
裡,最後統計一下即可。
比較有趣的是這個過程的複雜度……
#include using namespace std;
#define int long long
const int n = 1000005;
int n;
set st;
void solve(int n,int last,int sum)
}st.insert(sum+n-1);
}signed main()
}
組合數學 求組合數
對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...
數學 組合數學
mod must be a prime const int mod 1e9 7 namespace combinatory ll inv ll x ll fac maxn invfac maxn void initc int n ll a ll n,ll m ll c ll n,ll m ll d ...
組合數學筆記
從n個數中選m個數,每個數至多選一次,方案數 性質 c n,0 c n,n 1 c n,m c n,n m c n,m c n 1,m 1 c n 1,m 楊輝三角 二項式展開 x y n i 0.n c n,i x iy n i 那這裡先說一下楊輝三角 前提 每行端點與結尾的數為1 每個數等於它上...