POJ 1664 放苹果
来源:互联网 发布:php跨数据库查询 编辑:程序博客网 时间:2024/06/03 07:37
放苹果
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 33721 Accepted: 20870
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
17 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--platesif(dp2[m][n]) return dp2[m][n];else if(m==0||n==1) {dp2[m][n]=1;return 1;}else if(m<n) {dp2[m][n]=dp(m,m);return dp2[m][n];}else{//m>=ndp2[m][n]=dp(m,n-1)+dp(m-n,n);return dp2[m][n];}}int main(){//init();int m,n;cin>>m>>n;while(!cin.eof()){cout<<dp(m,n)<<endl;cin>>m>>n;}return 0;}
0 0
- poj 1664 放苹果
- poj 1664 放苹果
- poj 放苹果 1664
- POJ 1664 放苹果
- POJ 1664 放苹果
- POJ 1664 放苹果
- POJ-1664-放苹果
- poj - 1664 - 放苹果
- poj 1664 放苹果
- POJ-1664(放苹果)
- poj 1664 放苹果
- POJ 1664 放苹果
- POJ 1664 放苹果
- POJ 1664 放苹果
- POJ 1664 放苹果
- poj 1664 放苹果
- poj 1664 放苹果
- POJ 1664 放苹果
- 容器类的用法
- -bin-sh-m-bad-interpreter-no-such-file-or-directory
- 学习Python 免费电子书 TOP10(含下载)
- 判断是否有摄像头(前后摄像头)
- 在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
- POJ 1664 放苹果
- 快速幂及同余定理
- bzoj 4710 [Jsoi2011]分特产
- seo优化高级方法之如何更好的利用站群策略
- MATLAB中m文件分节/Cell
- java中的XML操作
- js call()与apply(区别)
- myeclipse2015中使用默认插件实现协同开发总结
- Python切分字符串