POJ 1664 放苹果
2017-04-18 15:39
239 查看
放苹果
Description
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
Input
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
Output
对输入的每组数据M和N,用一行输出相应的K。
Sample Input
Sample Output
Source
考虑:m为苹果数,n为盘子数;
如果苹果个数为0,或者盘子个数为1,则放置方式只有一种
如果苹果个数<盘子数,那么肯定有空的盘子,这些盘子就不考虑了
如果苹果个数>=盘子数:
可以选一个盘子不放苹果,就是f(m,n-1)
或者所有盘子都得放苹果,那就是f(m-n,n)
所以结果就是二者的加和。
需要考虑打表/记忆化搜索以缩小时间代价。
以上的递推式详见代码
//@auther zhou
//@Number 201408070203
//@start time:
//@finish time:
/*@此处注意:
*/
/* 测试数据
*/
#include<iostream>
#include<cstring>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
int dp2[21][21]={0};
int dp(int m,int n){
//m--apples
//n--plates
if(dp2[m]
) return dp2[m]
;
else if(m==0||n==1) {
dp2[m]
=1;
return 1;
}
else if(m<n) {
dp2[m]
=dp(m,m);
return dp2[m]
;
}
else{//m>=n
dp2[m]
=dp(m,n-1)+dp(m-n,n);
return dp2[m]
;
}
}
int main(){
//init();
int m,n;
cin>>m>>n;
while(!cin.eof()){
cout<<dp(m,n)<<endl;
cin>>m>>n;
}
return 0;
}
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 33721 | Accepted: 20870 |
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
Input
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
Output
对输入的每组数据M和N,用一行输出相应的K。
Sample Input
1 7 3
Sample Output
8
Source
考虑:m为苹果数,n为盘子数;
如果苹果个数为0,或者盘子个数为1,则放置方式只有一种
如果苹果个数<盘子数,那么肯定有空的盘子,这些盘子就不考虑了
如果苹果个数>=盘子数:
可以选一个盘子不放苹果,就是f(m,n-1)
或者所有盘子都得放苹果,那就是f(m-n,n)
所以结果就是二者的加和。
需要考虑打表/记忆化搜索以缩小时间代价。
以上的递推式详见代码
//@auther zhou
//@Number 201408070203
//@start time:
//@finish time:
/*@此处注意:
*/
/* 测试数据
*/
#include<iostream>
#include<cstring>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
int dp2[21][21]={0};
int dp(int m,int n){
//m--apples
//n--plates
if(dp2[m]
) return dp2[m]
;
else if(m==0||n==1) {
dp2[m]
=1;
return 1;
}
else if(m<n) {
dp2[m]
=dp(m,m);
return dp2[m]
;
}
else{//m>=n
dp2[m]
=dp(m,n-1)+dp(m-n,n);
return dp2[m]
;
}
}
int main(){
//init();
int m,n;
cin>>m>>n;
while(!cin.eof()){
cout<<dp(m,n)<<endl;
cin>>m>>n;
}
return 0;
}
相关文章推荐
- poj 1664放苹果
- poj 1664 放苹果
- poj1664放苹果
- POJ-1664 放苹果
- POJ 1664放苹果 - 详解
- POJ 1664 /NYOJ 758 放苹果问题(递归)
- POJ1664 放苹果【递推】
- OpenJudge/Poj 1664 放苹果
- poj 1664 放苹果
- poj 1664 放苹果(递推)
- POJ Problem 1664 放苹果
- poj 1664 放苹果 (递推)
- POJ 1664 放苹果
- poj 1664 放苹果 将m个相同的苹果放进n个相同的盘子中,盘子允许空,有多少种方法
- poj 1664 放苹果
- POJ 1664放苹果(递归问题)
- 放苹果【poj 1664】
- poj 1664 放苹果 递归
- 经典递归问题--放苹果POJ【1664】
- poj 1664 放苹果 递归