放苹果 分治法
http://poj.org/problem?id=1664 //整数划分问题 #include <iostream> using namespace std; /* f(n,m)表示将正整数n划分成若干个不大于m的整数的和的分法 f(n,m) = 1 n = 1 || m = 1 f(n,n) n < m 1 + f(n,n - 1) n = m f(n - m, m) + f(n, m - 1) n > m > 1 */ int f(int n, int m) { if(n == 1 || m == 1) return 1; else if(n < m) return f(n, n); else if(n == m) return 1 + f(n ,n -1); else return f(n - m, m) + f(n, m - 1); } int main() { int t,m,n; cin>>t; while(t--) { cin>>m>>n; cout<<f(m, n)<<endl; } return 0; }