题目描述

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法
输入
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
输出
对输入的每组数据M和N,用一行输出相应的K。

样例输入

2
6 3
7 2

样例输出

7
4

思路

当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即dp(m,n)=dp(m,m)
当n<=m:不同的放法可以分成两类:

  1. 有至少一个盘子空着,即相当于dp(m,n)=dp(m,n-1)。按照动态规划或者递归的思路,dp(m,n-1)已经包含dp(m,n-2)的结果或者可以通过下一层的递归进行计算,所以这个只需要考虑最上层的dp(m,n-1)即可。
  2. 所有盘子都有苹果,相当于可以从每种情况下的每个盘子中拿掉一个苹果,而不影响不同放法的数目(此处较难理解),即f(m,n)=f(m-n,n)
    而总的放苹果的放法数目等于两者的和,即dp(m,n)=dp(m,n-1)+dp(m-n,n)

边界:

  1. 当篮子数为1时,所有苹果都必须放在一个盘子里,方法数为1
  2. 当苹果数为0时,方法数为1

AC代码

#include<iostream>
#include<cstring>
using namespace std;
int main(){int n,apple_num,basket_num;cin>>n;while(n--){cin>>apple_num>>basket_num;int dp[apple_num+1][basket_num+1];memset(dp,0,sizeof(dp));for(int i=1;i<=basket_num;i++)  dp[0][i]=1;//边界for(int i=0;i<=apple_num;i++)   dp[i][1]=1;//边界for(int i=1;i<=apple_num;i++)for(int j=1;j<=basket_num;j++)if(i>=j)    dp[i][j]=dp[i][j-1]+dp[i-j][j];else        dp[i][j]=dp[i][i];cout<<dp[apple_num][basket_num]<<endl;}return 0;
}

OJ地址

http://codeup.cn/problem.php?cid=100000632&pid=5

C++——放苹果(动态规划)相关推荐

  1. 放苹果———动态规划中的划分数问题

    动态规划问题 放苹果是一道典型的DP问题,这道题采用递归+分治+DP的方式解决. 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和 ...

  2. POJ-1664 放苹果 动态规划思想解组合数学

    该题说明了状态开设的意义一样,但是从哪个方向去理解推倒状态的转移对解题非常关键.该题扣住是否所有的盘子中有空盘子,就得到了一个非常简单且优美的方程.如果从当前盘子的放置状态或者是当前苹果的放置状态来求 ...

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

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

  4. 从放苹果问题到零钱兑换问题(动态规划)

    放苹果问题 题目描述 把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 数据范围:0<=m<=10,1 ...

  5. 程序设计与算法----递归之放苹果问题

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

  6. 华为机试_HJ61 放苹果【简单】【收藏】

    目录 描述 输入描述: 输出描述: 解题过程 提交代码 递归方法 动态规划方法 学习代码 递归方法 动态规划方法 收藏点 描述 把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种 ...

  7. 43.放苹果(递归练习)

    放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分 ...

  8. POJ-1664 放苹果

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21021   Accepted: 13395 Description ...

  9. 递归--练习4--noi666放苹果

    递归--练习4--noi666放苹果 一.心得 写出状态后勇敢假设 二.题目 666:放苹果 总时间限制:  1000ms 内存限制:  65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允 ...

最新文章

  1. OpenCV 读取一张图片并显示和保存
  2. 精确通知,顺序访问——Lock锁比synchronized锁的优势之处
  3. SeqStack(Templateclass T)实现
  4. CNCF 公布 2020 年 TOC 选举结果 | 云原生生态周报 Vol. 36
  5. 适用于Linux / X11的Qt
  6. Stimulsoft Reports.Net基础教程(七):创建列式报表①
  7. vue element form中input等组件不能输入值
  8. poj2349:Arctic Network(最小生成树)
  9. 绕过路由系统 (Bypassing the Routing System)| 高级路由特性
  10. spring aop如何在切面类中获取切入点相关方法的参数、方法名、返回值、异常等信息
  11. 异常值筛选 拉依达准则 格拉布斯_时序预测竞赛之异常检测算法综述
  12. 亮宁机器人套件_亮宁机器人可视化平台V2.2第3讲(图文)
  13. 经纬度转换器_FME应用小实例:线面经纬度集合快速转几何图形
  14. Android车载导航的一些困境
  15. IOT语义互操作性之本体论
  16. Ceph剖析:Leader选举
  17. QT 显示gif 和 flash 动画技巧
  18. Oracle Database 12c Security - 13. An Applied Approach to Multitenancy and Cloud Security
  19. 他选歌太纠结了,有时临比赛开始的前一天才能
  20. html文章font-family字体集合

热门文章

  1. 普通用户登录和管理员登录区分
  2. 不要再吹水地球人听不懂的技术,咱来点干货
  3. 完美解决Could not find a version that satisfies the requirement xxx (from versions: )
  4. 恳请李开复老师创建软件培训学院的一封信
  5. 可以测试人未来的长相软件,预测未来长相软件
  6. linux视频播放器mplayer,ubuntu 视频播放器mplayer
  7. JAVA面试(不同类型的公司特点)
  8. 六、用 Actix-web 构建异步 web工程
  9. Book——电力系统规划与可靠性
  10. 【利用AI让知识体系化】Webpack 相关配置技巧