1222:放苹果

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 8383     通过数: 5465

【题目描述】

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用KK表示)5,1,11,5,1 是同一种分法。

【输入】

第一行是测试数据的数目tt(0≤t≤20)。以下每行均包含二个整数M和N,以空格分开。1≤M,N≤10。

【输出】

对输入的每组数据M和N,用一行输出相应的K。

【输入样例】

1
7 3

【输出样例】

8

【分析】

以样例为例,先思考一下,如果用枚举,怎么实现?,很简单,代码与结果如下:

样例就这8种情况,很显然,三个盘子,最少一个不放,最多不超过7个,前面盘子放的苹果数小于或等于后面盘子放的苹果数。

本题同1206:放苹果和1192:放苹果题目,递归和递推解法自行参看1206和1192。这里要用dfs实现,那么怎么实现呢?

实际上就是将三个盘子看成三个坑,依次填数。递归解答树如下:

含义就是第一层,第一个盘子,可以放0~7个苹果;第二层,当第一个盘子放0个苹果时,第二个盘子可以放0~7个苹果;第三层,当第二个盘子放0个苹果时,第三个盘子只能放7个苹果。深搜该解答树即可。

需要记录的数据有:当前盘子编号,当前已放置的苹果中数,当前最少需放置的苹果数(保证后面的盘子苹果数>=前面盘子里的苹果数)。参考代码1如下:

【参考代码1】

#include <stdio.h>
int m,n;
int cnt=0;void dfs(int plate,int apple,int last)  //当前盘子编号,当前已放的苹果总数,当前需最少放置的苹果数
{int i;if(plate==n && apple==m)  //盘子数=n,苹果数=m,找到一组解 {cnt++;return;}if(plate==n || apple>m)   //盘子数=n,苹果数>m,无解 return;for(i=last;i<=m;i++)dfs(plate+1,apple+i,i);
}
int main()
{int t;scanf("%d",&t);while(t--){cnt=0;scanf("%d%d",&m,&n);dfs(0,0,0);printf("%d\n",cnt);}   return 0;
}

上述代码从(0,0,0)搜索到(7,3,7)当然,也可以逆向搜索,从(7,3,7)搜索到(0,0,0),参考代码2 如下:

【参考代码2】

#include <stdio.h>
int m,n;
int cnt;void dfs(int apple,int plate,int last)  //剩余苹果数,剩余盘子数,最大可放苹果数
{int i;if(apple==0)  //剩余苹果数=0,找到一组解{ cnt++;return;}if(plate>0){for(i=last;i>0;i--){if(apple-i>=0)dfs(apple-i,plate-1,i);}}
}
int main()
{int t;scanf("%d",&t);while(t--){cnt=0;scanf("%d%d",&m,&n);dfs(m,n,m);printf("%d\n",cnt);}   return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1222

信息学奥赛一本通(1222:放苹果)相关推荐

  1. 信息学奥赛一本通 1038:苹果和虫子 | OpenJudge NOI 1.3 15 | OpenJudge NOI 1.4 21

    [题目链接] ybt 1038:苹果和虫子 OpenJudge NOI 1.3 15:苹果和虫子 OpenJudge NOI 1.4 21:苹果和虫子2 [题目考点] 1. if-else语句 if( ...

  2. 信息学奥赛一本通-1038:苹果和虫子

    [题目描述] 你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子.虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果? [输入] 输入仅一行 ...

  3. 信息学奥赛一本通C++语言-----1103:陶陶摘苹果

    [题目描述] 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在已知 ...

  4. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  5. 信息学奥赛一本通在线提交地址

    信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...

  6. 信息学奥赛一本通OJ勘误

    信息学奥赛一本通OJ 是面向信奥初学者的很好用的OJ,感谢网站作者的的耐心制作. 尽管如此,该网站还是有一些错误,在此指明.瑕不掩瑜,希望网站作者早日修正. 1198:逆波兰表达式 题目中概念错误,应 ...

  7. 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...

  8. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  9. 信息学奥赛一本通1336:寻找树根和孩子(图论算法-树)详细讲解

    题目 信息学奥赛一本通(C++版)在线评测系统 思路讲解 首先我们可以看到这到题数据量不大,可以直接简单粗暴用邻接矩阵来存,用题目中的数据,邻接矩阵存储如下: 1 2 3 4 5 6 7 8 1 1 ...

  10. 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)

    [题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...

最新文章

  1. 手把手教你使用 Python 制作贪吃蛇游戏
  2. 向STM32串口发送数据的标准函数
  3. 比较全的 POM.xml
  4. 在CDS(Core Data Services)中使用DCL(Data Control Language)
  5. Swift - 自定义UIActivity分享
  6. 花里胡哨?一起来看看 PyCharm 2019.3 增加了哪些新功能吧
  7. ide快捷键_新买的固态硬盘用AHCI不能装系统,而用IDE却可以?问题就在这里
  8. imp导入dmp文件报:IMP-00038: 无法转换为环境字符集句柄IMP-00000: 未成功终止导入
  9. 信息学奥赛一本通 1086:角谷猜想 | OpenJudge NOI 1.5 21
  10. Atitit 网络协议概论 艾提拉著作 目录 1. 有的模型分七层,有的分四层。我觉得 1 1.1. 三、链接层 确定了0和1的分组方式 1 1.2. 网络层(ip mac转换层 3 1.3. 传输
  11. 仿映客直播礼物特效制作流程
  12. 摸爬滚打半年,我是如何从小白进阶到渗透测试工程师
  13. 桌面IE图标删不掉解决方案
  14. 用php建站_九个常用的php建站系统
  15. 【如何7天写完一篇发明专利】
  16. 关于517编程的11月月赛
  17. 鲁大师网卡版 v3.71.14 离线驱动版
  18. LTR问题 position debias方法
  19. STM32cube 控制 AIP650 TM1650
  20. 使用手机搭建服务器,使用同一网段电脑访问

热门文章

  1. 基于visual Studio2013解决面试题之0410计算二进制中1的个数
  2. 自我训练——时间控制能力(四)
  3. Visual C#常用函数和方法集汇总
  4. 还在使用 Windows?我的70岁母亲都用了 21 年 Linux
  5. DeepNude已迅速下线,来看看它涉及的图像修复技术
  6. LwIP之网络接口管理
  7. 你的消息队列如何保证消息不丢失,且只被消费一次,这篇就教会你
  8. 阿里巴巴Java开发手册的正确学习姿势是怎样的? | 文末送书
  9. 山哥新作:架构师必备技能之业务分析
  10. 资深架构专家聊架构之道:规划、简化和演化(续)