放苹果
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 37515   Accepted: 23090

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

  1. 1
  2. 7 3

Sample Output

  1. 8

思路:多校见过类似的题目,简单母函数题目,不过比赛的时候,直接给出了解题分析:用的递归写的,感觉不是太理解。

递归:(见注释)

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <string>
  7. #include <vector>
  8. #include <set>
  9. #include <map>
  10. #include <queue>
  11. #include <algorithm>
  12. #include <sstream>
  13. #include <stack>
  14. using namespace std;
  15. #define mem(a,b) memset((a),(b),sizeof(a))
  16. #define mp make_pair
  17. #define pb push_back
  18. #define fi first
  19. #define se second
  20. #define sz(x) (int)x.size()
  21. #define all(x) x.begin(),x.end()
  22. typedef long long ll;
  23. const int inf = 0x3f3f3f3f;
  24. const ll INF =0x3f3f3f3f3f3f3f3f;
  25. const double pi = acos(-1.0);
  26. const double eps = 1e-;
  27. const ll mod = 1e9+;
  28. //head
  29.  
  30. int fun(int m, int n) {
  31. if(n == || m == )//如果剩1个盘子 || 没有苹果可以放
  32. return ;
  33. if(n > m)//如果盘子多于苹果,相当于去除多余盘子
  34. return fun(m, m);
  35. else //前者:所有盘子都有苹果,相当于每一个盘子都拿掉一个。后者:至少有一个空盘子
  36. return fun(m-n, n) + fun(m, n-);
  37. }
  38.  
  39. int _, n, m;
  40. int main() {
  41. for(scanf("%d", &_);_;_--) {
  42. scanf("%d%d", &m, &n);
  43. printf("%d\n", fun(m, n));//m个苹果,n个盘子
  44. }
  45. }

母函数:

理解母函数就是一道裸题,写出各个式子,然后计算,系数即为答案。

有一点比较难理解。我其实一直以为是k++,因为每一项都是,但是题目说了

1,1,5 和 5,1,1是同一种,所以k++会重复,所以用,这样保证了不会重复。

可以理解为拿几个1,拿几个5,这样就避免了重复。

推荐博客:https://www.cnblogs.com/dolphin0520/archive/2012/11/07/2755080.html

母函数计算理解:http://blog.chinaunix.net/uid-26602509-id-3193699.html 

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <string>
  7. #include <vector>
  8. #include <set>
  9. #include <map>
  10. #include <queue>
  11. #include <algorithm>
  12. #include <sstream>
  13. #include <stack>
  14. using namespace std;
  15. #define mem(a,b) memset((a),(b),sizeof(a))
  16. #define mp make_pair
  17. #define pb push_back
  18. #define fi first
  19. #define se second
  20. #define sz(x) (int)x.size()
  21. #define all(x) x.begin(),x.end()
  22. typedef long long ll;
  23. const int inf = 0x3f3f3f3f;
  24. const ll INF =0x3f3f3f3f3f3f3f3f;
  25. const double pi = acos(-1.0);
  26. const double eps = 1e-;
  27. const ll mod = 1e9+;
  28. //head
  29. int c1[], c2[];//c1存展开式的系数,c2计算时保存
  30. int _, m, n;
  31. int main() {
  32. for(scanf("%d", &_);_;_--) {
  33. scanf("%d%d", &m, &n);
  34. for(int i = ; i <= m; i++) {//初始化第一个表达式
  35. c1[i] = ;
  36. c2[i] = ;
  37. }
  38. for(int i = ; i <= n; i++) {//从第二个开始
  39. for(int j = ; j <= m; j++) {//已经累乘的式子的第j项
  40. for(int k = ; k+j <= m; k += i) {//k += i !!!
  41. c2[j+k] += c1[j];
  42. }
  43. }
  44. for(int i = ; i <= m; i++) {//更新
  45. c1[i] = c2[i];
  46. c2[i] = ;
  47. }
  48. }
  49. printf("%d\n", c1[m]);//次数为m的系数即为答案
  50. }
  51. }

POJ1664 放苹果 (母函数)的更多相关文章

  1. poj1664 放苹果(DPorDFS)&&系列突破(整数划分)

    poj1664放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33661   Accepted: 20824 Desc ...

  2. [POJ1664]放苹果(动态规划)

    [POJ1664]放苹果 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第 ...

  3. poj1664放苹果(递归)

    题目链接:http://poj.org/problem?id=1664 放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  4. poj1664 放苹果(递归)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=1664 ------ ...

  5. [POJ1664] 放苹果 (动态规划,组合数学)

    题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 输入输出格式 输入格式: 第一行是测试数据的数目t(0 <= ...

  6. POJ1664 放苹果

    #include <iostream> #include <cstdio> #include <cstring> using namespace std; int ...

  7. 放苹果(poj1664递归)

    ti放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24392   Accepted: 15513 Descripti ...

  8. POJ1664:放苹果(线性dp)

    题目: http://poj.org/problem?id=1664 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1 ...

  9. 放苹果(整数划分变形题 水)poj1664

    问题:把M个相同的苹果放在N个相同的盘子里.同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 例子 : 1 7 3 ---------------8 ...

随机推荐

  1. Celery-4.1 用户指南: Extensions and Bootsteps (扩展和Bootsteps)

    自定义消息消费者 你可能想要嵌入自定义的 Kombu 消费者来手动处理你的消息. 为了达到这个目的,celery 提供了一个 ConsumerStep bootstep 类,你只需要定义 get_co ...

  2. 基于ActiveMQ的Topic的数据同步——初步实现

    一.背景介绍 公司自成立以来,一直以做项目为主,算是经累经验吧,自去年以来,我们部门准备将以前的项目做成产品,大概细分了几个小的产品,部们下面又分了几个团队,分别负责产品的研发,而我们属于平台团队,负 ...

  3. request 10.0 模块安装

     https://pypi.python.org/packages/49/6f/183063f01aae1e025cf0130772b55848750a2f3a89bfa11b385b35d7329d ...

  4. Enumeration与Iterator的对比

    Enumeration与Iterator的对比 Enumeration 接口 Iterator 接口 参数的含义 枚举类型 迭代器元素类型 所在包 java.util 父类 无 子类 StringTo ...

  5. cookie禁用后重定向跳转时session的跟踪

  6. ssh整合(dao使用hibernateTemplate)

  7. Java知识点总结1

    1.java的引用传递和值传递 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参 ...

  8. ArcGIS Field Type /esriFieldTypeDate(转)

    ArcGIS Field Type   The following table outlines the equivalent field data types in ArcCatalog, ArcO ...

  9. thinkphp目录解析

  10. SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descript ...