数的划分递归做法
题目:传送门
思路:很大一部分和放盘子问题一样,就是分类讨论,然后特别的地方在于第一次使用f函数时用的是f(n-k,k)而不是f(n,k)
因为题目说了不能为空,要填满,所以就先填满那层底,每一个数都先让他为1
#include<bits/stdc++.h> using namespace std; int f(int n,int k) { if(k==0) return 0; if(n==0||n==1) return 1; if(n>=k) return f(n-k,k)+f(n,k-1); else return f(n,n); } int main() { std::ios::sync_with_stdio(false); int n,k; cin>>n>>k; cout<<f(n-k,k)<<endl; }