1. 程式人生 > >【題解】盒子與球

【題解】盒子與球

div pac 滿了 hid 格式 names hide namespace ()

題目描述

n個有區別的球放到m個相同的盒子中,要求無一空盒,其不同的方案用S(m,n)表示,稱為第二類Stirling數。

輸入輸出格式

輸入格式

一行,兩個整數為n,m。(1≤n≤10,1≤m≤10)

輸出格式

一行,表示其對應的方案數。

輸入輸出樣例

輸入樣例

3 2

輸出樣例

3

題解

假設已經放了$(i-1)$個球,總共有$j$個盒子。

如果這些球放滿了$(j-1)$個盒子,顯然第$i$個球只能放在第$j$個盒子裏。

但如果這些球放滿了$j$個盒子,那第$i$個球的放置就有$j$種選擇。

得出遞推式為:$a[i][j]=a[i-1][j]\times j+a[i-1][j-1]$

技術分享圖片
#include <iostream>
#include <cmath>

using namespace std;

int n, m;
int a[11][11];

int main()
{
    cin >> n >> m;
    a[1][1] = 1;
    for(int i = 2; i <= n; i++)
    {
        
for(int j = 1; j <= min(i, m); j++) { a[i][j] = a[i - 1][j] * j + a[i - 1][j - 1]; } } cout << a[n][m]; return 0; }
參考程序

【題解】盒子與球