[POJ] 1664 -> 放苹果
2015-04-29 08:23
190 查看
放苹果
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
我们假设苹果的总数是m,盘子的总数是n;1:如果m<n(说明苹果的总数比盘子的小),这样至少有n-m个盘子是空的,就是说每个盘子里放一个 苹果,也有盘子是空的,此时我们将n改成m,它和m个苹果,m个盘子的情况结果一样。2:如果m=0,情况数是1;3:如果n=1,情况数是1;4:如果m>=n,我们来想,要么盘子全部都有苹果,这时是f(m-n,n),要么有盘子是空的,即f(m,n-1)这样我们的递归式子就找到了f(m,n)=f(m-n,n)+f(m,n-1);
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 27392 | Accepted: 17380 |
把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
解题思路:
我们假设苹果的总数是m,盘子的总数是n;1:如果m<n(说明苹果的总数比盘子的小),这样至少有n-m个盘子是空的,就是说每个盘子里放一个 苹果,也有盘子是空的,此时我们将n改成m,它和m个苹果,m个盘子的情况结果一样。2:如果m=0,情况数是1;3:如果n=1,情况数是1;4:如果m>=n,我们来想,要么盘子全部都有苹果,这时是f(m-n,n),要么有盘子是空的,即f(m,n-1)这样我们的递归式子就找到了f(m,n)=f(m-n,n)+f(m,n-1);
Code:
#include <iostream> using namespace std; int f(int m, int n){ if (m < n) return f(m, m); if (m == 0 || m == 1 || n == 1) return 1; return f(m - n, n) + f(m, n - 1); } int main() { int t, m, n; cin >> t; while (t--){ cin >> m >> n; cout << f(m, n) << endl; } return 0; }
相关文章推荐
- POJ 1664 放苹果
- poj 1664 放苹果
- POJ 1664 放苹果 解题报告
- POJ 1664 放苹果
- poj 1664 放苹果(递推,记忆化搜索)简单题
- 递归及递推问题系列之 放苹果 poj 1664
- POJ 1664 放苹果(递归或DP)
- poj1664放苹果
- poj--1664--放苹果(递归好体)
- poj 1664 放苹果
- POJ 题目1664 放苹果(递归)
- POJ 1664 放苹果(经典递推)
- POJ 1664 分苹果(递归)。
- POJ-1664 放苹果(递归的运用)
- poj 1664 放苹果(dfs/dp/母函数)
- POJ 1664 放苹果
- POJ-1664-放苹果
- poj 1664 放苹果,递归(深度优先搜索)
- POJ 1664 放苹果
- poj1664放苹果