1. 程式人生 > >sincerit 演算法競賽寶典 放蘋果

sincerit 演算法競賽寶典 放蘋果

放蘋果
問題描述:把m個同樣的蘋果放在n個同樣的盤子裡,
允許有的盤子空著不放,問有多少種不同的分法?(注:5,1,1和1,1,5是同一種分法)
/*
遞迴解法(思考)

  1. 當N > M時 至少有N-M個盤子為空
    分法數為M個蘋果放入M個盤子 solve(m, m)
  2. 當N <= M時
    有兩種分法:
    有盤子為空 solve(m, n-1)
    沒有盤子為空 solve(m-n, n);
    出口 m == 0 || n == 1 return 1; // 表示找到一種分法
    */
#include <iostream>
#include <stdio.h>
#include <cstring> #include <algorithm> using namespace std; int solve(int m, int n) { if (m == 0 || n == 1) return 1; if (m < n) return solve(m, m); return solve(m, n-1) + solve(m-n, n); } int main() { int m, n; while (cin >> m >> n) { cout << solve(m,
n) << "\n"; } return 0; }