当前位置: 代码迷 >> 综合 >> poj1664(递推)
  详细解决方案

poj1664(递推)

热度:26   发布时间:2024-01-04 09:26:40.0

题目链接: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;
}