题目链接:http://poj.org/problem?id=1664
题目大意:如题
解题思路:有m个苹果和n个盘子,1.如果m<n,此时必然有n-m个盘子空着,因此f[m][n]=f[m][m];
2.如果m>=n,则分为两种情况,有至少一个盘子空着,或者是全部盘子都占满,此时只需要考虑每个盘子中都有一个苹果,剩下的苹果如何摆放,因此f[m][n]=f[m][n-1]+f[m-n][n];
AC代码;
#include <iostream>
using namespace std;
int main()
{int t;int n,m;int num[15][15];cin>>t;while(t--){cin>>m>>n;for(int i=0;i<=m;i++){num[i][0]=1;num[i][1]=1;}for(int i=0;i<=n;i++){num[0][i]=1;num[1][i]=1;}for(int i=2;i<=m;i++){for(int j=2;j<=n;j++){if(i<j)num[i][j]=num[i][i];if(i>=j)num[i][j]=num[i][j-1]+num[i-j][j];}}cout<<num[m][n]<<endl;}return 0;
}