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;
}
放苹果 分治法
最新推荐文章于 2019-10-01 16:59:42 发布