题目来源: http://poj.org/problem?id=1664
很久以前做的分苹果的算法,最近闲的没事,又找出来了
using namespace std;
int getMethods(int m, int n) {//m个苹果, n个盘子 [1,10]
if(m==1 || n==1) return 1;//1个苹果或者1个盘子,那结果肯定是1
if(n>m) n = m;//盘子数目多于苹果的时候,那结果就是和盘子数目等于苹果数目的是一样的,比方说2个苹果2个盘子和是个苹果3个盘子是一样的结果
int k = 1 + m/2; //先初始化值为1个盘子和两个盘子的情况
for(int i=3; i<=n; i++) {//3-n个盘子
if(m==i) k++;
else k += getMethods(m-i, i);
}
return k;
}
int main(int argc, char** argv) {
int t;
int m, n;
cin>>t;//[0,20]
while(t--) {
cin>>m>>n;
cout<<getMethods(m, n)<<endl;
}
return 0;
}