POJ 1664 求m个苹果放入n个盘子的不同放法数目 递归 分类讨论
来源:互联网 发布:服装连锁收款软件 编辑:程序博客网 时间:2024/05/01 18:20
通过分类讨论,将规模较大的问题转换成规模较小的相同问题,学会”降维“,将索引值不断降小,就可以递归求解
设f(m,n)为把m个苹果放到n个盘子中的方法数,m>=0,n>=0.
若m和n中任何一个等于0,那么f(m,n) = 1,注意不是等于0,因为相当于就那么一种结果,就是不往盘子里面放(没有苹果),或者,连盘子都没有。若n=1,显然对于任意的m>=0 有f(m,1) = 1
若m=1,显然对于任意的n>=0 有f(1,n) = 1
接下来讨论m>1 && n>1的情况:
若 m < n 则 f(m,n) = f(m,m)。即空哪几个盘子都是一样的
若 m>=n 则 大体有两种放法:
第1种情况:至少有一个盘子为空,即什么也不放,这部分的方法数为f(m,n-1);
第2种情况:全部盘子都有苹果,那么先从m个苹果中抽取出n个出来,各个盘子分一个,考虑剩下的m-n个苹果放到n个盘子里的放法,这样就成功把f(m,n)降到了f(m-n,n)。所以,m>=n时,有f(m,n) = f(m,n-1) + f(m-n,n);
Source Code
Problem: 1664 User: yangliuACMerMemory: 384K Time: 0MSLanguage: GCC Result: Accepted#include<stdio.h>int f(int x,int y){if(y ==1||x==0) return 1;if(x<y) return f(x,x);return f(x,y-1)+f(x-y,y);//至少一个盘子为空或者每个盘子都放了苹果}void main(){int t,m,n,i;scanf("%d",&t);for(i=0;i<t;i++){scanf("%d%d",&m,&n);printf("%d\n",f(m,n));}}
- POJ 1664 求m个苹果放入n个盘子的不同放法数目 递归 分类讨论
- POJ 1664 放苹果(m个苹果放入n个盘子
- poj 1664 m个苹果放入n个盘子,递归写法和DP写法
- m个苹果放入n个盘子
- m个苹果放入n个盘子
- m个苹果放入n个盘子
- 将m个苹果放入n个盘子的问题
- poj 1664 放苹果 将m个相同的苹果放进n个相同的盘子中,盘子允许空,有多少种方法
- 转:poj 1664 放苹果 将m个相同的苹果放进n个相同的盘子中,盘子允许空,有多少种方法
- 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
- 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
- 【放苹果】m个苹果放到n个盘子中
- [ACM] POJ 1664 放苹果(n个相同小球放入m个相同盒子)
- n个盘子放m个苹果(动态规划)
- 【C++】m个苹果放在N个盘子里
- M个苹果放在N个盘子
- 把n个同样的苹果放在m个同样的盘子里
- 把M个同样的苹果放在N个同样的盘子里
- 【ORACLE】oracle数据文件损坏,出现错误:ora-01033:oracle initialization or shutdown in progress
- C++new的用法
- 【图染色】POJ 1419 & UVA 193
- 内存管理:new和delete
- 摩托罗拉 Moto XT800的CPU多少?
- POJ 1664 求m个苹果放入n个盘子的不同放法数目 递归 分类讨论
- MFC的消息映射有什么作用
- VirtualBox虚拟机实现桥接方式
- C标准库参考指南系列译文(12)stdio.h(A)
- Android Camera拍照常见问题小结
- 比较决策树和回归
- eclipse导出javadoc时编码错误或不显示注释的解决办法
- BI中如何配置Schema
- 2012-02-11