#LAISIR58. 糖果分配(Candy Distribution)

糖果分配(Candy Distribution)

🍬 題目名稱:糖果分配(Candy Distribution)

【題目描述】 老師有 n 位可區分的學生(編號為 1 到 n),以及 m 顆可區分的糖果。每顆糖果都有一個甜度值。老師想把所有糖果都分給學生,但必須遵守以下規則:

  1. 每顆糖果必須分配給恰好一位學生
  2. 糖果不能丟棄,必須全部分完
  3. 每位學生可以分得 0 顆或多顆糖果
  4. 每位學生獲得的糖果甜度總和不能超過上限 K

請計算有多少種合法的分配方式。

【輸入格式】

  • 第一行:三個整數 n, m, K
    • 1 ≤ n ≤ 6(學生數)
    • 1 ≤ m ≤ 10(糖果數)
    • 1 ≤ K ≤ 20(甜度上限)
  • 第二行:m 個整數,表示每顆糖果的甜度值
    • 每個甜度值介於 1 到 K 之間

【輸出格式】

  • 一個整數,表示合法分配方案的總數

【輸入樣例 1】

2 3 5
1 2 3

【輸出樣例 1】

6

【樣例 1 解釋】 有 2 位可區分的學生,3 顆可區分的糖果(甜度 1, 2, 3),甜度上限 K=5。

合法分配方案:

  1. 學生1:糖果{1,2}(甜度和=3),學生2:糖果{3}(甜度和=3)
  2. 學生1:糖果{1,3}(甜度和=4),學生2:糖果{2}(甜度和=2)
  3. 學生1:糖果{2,3}(甜度和=5),學生2:糖果{1}(甜度和=1)
  4. 學生1:糖果{3}(甜度和=3),學生2:糖果{1,2}(甜度和=3)
  5. 學生1:糖果{2}(甜度和=2),學生2:糖果{1,3}(甜度和=4)
  6. 學生1:糖果{1}(甜度和=1),學生2:糖果{2,3}(甜度和=5)

不合法的例子:

  • 學生1:糖果{1,2,3}(甜度和=6 > 5)
  • 學生2:糖果{1,2,3}(甜度和=6 > 5)

總共有 6 種合法分配方式。

【輸入樣例 2】

3 4 4
1 2 3 1

【輸出樣例 2】

36

【數據範圍】

  • 學生數 n:1 到 6
  • 糖果數 m:1 到 10
  • 甜度上限 K:1 到 20
  • 每顆糖果甜度:1 到 K
  • 保證至少有一種合法分配方案

【重要說明】

  • ✅ 學生是可區分的(學生1 ≠ 學生2)
  • ✅ 糖果是可區分的(糖果A ≠ 糖果B)
  • ✅ 分配方案由「每顆糖果分配給哪個學生」決定
  • ✅ 不同的分配順序視為不同的方案