目录

DP

DFS


题目描述

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法)

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1: 复制

1
7 3

输出样例#1: 复制

8

输入样例#2: 复制

3
3 2
4 3
2 7

输出样例#2: 复制

2
4
2

这题和数的划分做法相近,可以用DFS和DP,但是要注意该题的盘子是可空的。

DP

F[ i ][ j ]表示将 i 份分在 j 个盘子里

F[ 0 ][ j ]=F[ 1 ][ i ]=1 当苹果数量为0或1时只有一种方法

F[ i ][ 1 ]=1 当只有一个盘子时只有一种方法

  • 当 i<j 时,也就是苹果数量小于盘子数量时,F[ i ][ j ]=F[ i ][ i ]    因为 i 个苹果最多只能占用 i 个盘子
  • 当i>=j时,F[ i ][ j ]=F[ i-j ][ j ] + F[ i ][ j-1 ]

F[ i ][ j-1 ] 表示j个盘子中有空盘,取出空盘

F[ i-j ][ j ] 则是每个盘子先放一个苹果的策略


代码:

#include<bits/stdc++.h>
using namespace std;
int f[15][15];//f[i][j]即为i个苹果放在j个盘子里的方案数
int m,n,ans;
int main()
{ios::sync_with_stdio(false);int t;cin >> t;while(t--){cin >> m >> n;ans=0;memset(f,0,sizeof(f));//清空f数组 for(int i=1;i<=n;i++)f[0][i]=f[1][i]=1;for(int i=1;i<=m;i++)f[i][1]=1;]for(int i=2;i<=m;i++)for(int j=2;j<=n;j++)if(i<j)//如果苹果比盘子还少 f[i][j]=f[i][i];//等于i个苹果放在i个盘子里 elsef[i][j]=f[i-j][j]+f[i][j-1];//对于每一次,有两种做法: //1:j个盘子里都放 1个,即 f[i-j][j]//2:都不放,即            f[i][j-1]cout << f[m][n] << endl;//输出 }return 0;
}

DFS

#include<iostream>
using namespace std;
int t,n,k;
int f[11][11];
int sum;void dfs(int step,int num,int tar)
{if(tar==1){sum++; return ;}for(int i=step;i<=num/tar;i++)dfs(i,num-i,tar-1);
}int main()
{ios::sync_with_stdio(false);cin>>t;while(t--){cin>>n>>k;sum=0;dfs(0,n,k);//因为可以有空盘,所以从0开始 cout<<sum<<endl;}return 0;
}

P2386 放苹果(排列组合问题)相关推荐

  1. P2386 放苹果 方法一

    http://noi.openjudge.cn/ch0203/666/ /* 2.3基本算法之递归变递推_666放苹果 方法一 http://noi.openjudge.cn/ch0203/666/1 ...

  2. 5个球放入3个箱子_排列组合问题,把5个相同的球放到三个相同的盒子里,要求每个盒子都有球,则不同的放球方法是多少?...

    一个一个的列出来就好了. 2种.311和221 ----............... 修改. 这本来就是从一个一个列举出来的.要用到排列组合的都是一些特定的情况.不过这道题貌似用不上. 比如5个球变 ...

  3. 排列组合与盒子放球问题

    文章目录 排列组合 定义 组合公式 1.证明 C n m = C n n − m C_n^m=C_n^{n-m} Cnm​=Cnn−m​ 2.证明 C n m C m k = C n k C n − ...

  4. 排列组合 n个球放入m个盒子问题 总结

    算法: HDU - 6397 Character Encoding 插板法+容斥原理  https://blog.csdn.net/xiang_6/article/details/81868989 [ ...

  5. POJ 1164 放苹果 经典的组合问题

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

  6. 排列组合 n个球放入m个盒子算法 总结

    问题: 总结   https://blog.csdn.net/qwb492859377/article/details/50654627 N个球放M个盒子问题   https://blog.csdn. ...

  7. 【放苹果】m个苹果放到n个盘子中

    m个相同的苹果,放在n个相同的盘子中,由于相同,使用排列组合的方法不好处理.这里选用递归调用的方式解决问题: (8个苹果,放在3个盘子里)= (8个苹果,放在2个盘子) +(5个苹果,放在2个盘子[每 ...

  8. 组合数学(排列组合,容斥原理,数论定理)

    组合数学的学习 排列组合 一.排列组合基础 二.排列组合练习题 容斥原理 定理学习 例题练习 例题1: [ 1 , n ] [1,n] [1,n] 中有多少个数能被 x 或 y 整除 例题2: [ 1 ...

  9. c语言 10分苹果,POJ1664 放苹果 递归 C语言

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

最新文章

  1. atomikos mysql,记一次 Atomikos 分布式事务的使用
  2. Java IO: 字节和字符数组
  3. 【华为大咖分享】10.DevOps敏捷测试之道(后附PPT下载地址)
  4. C语言 extern
  5. mysql 联合主键_Mysql 创建联合主键
  6. Eclipse简单字体设置
  7. 最优化方法笔记-线性规划(大M法与两阶段法)
  8. 数据结构(四)图 —— 编程作业 04 :哈利·波特的考试
  9. chart metadata is missing these dependencies
  10. 什么是和包(NFC)业务
  11. #1778. [Usaco2010 Hol]Dotp 驱逐猪猡(高斯消元)
  12. cpu.h-栈的宏定义-满减栈
  13. php float 取整,php float 转 int 的问题
  14. 安全运维和安全运营的区别
  15. [Delphi]Delphi中的ODBC和ADO
  16. 看一遍你也会做!用英伟达 DIGITS 进行图像分割(下)
  17. 排序-------简单选择实现(Java实现)
  18. WordPress php升级到7.2提示Warning: Use of undefined constant Y – assumed ‘Y’ 问题解决
  19. 32位程序在64位系统上调用GetModuleFileNameEx失败
  20. 基于JAVA宠物爱心救助系统计算机毕业设计源码+系统+lw文档+部署

热门文章

  1. libcurl库介绍
  2. win7访问网络计算机xp,“Win7局域网访问XP出现0x80070035错误”的解决方案
  3. LeetCode算法思想之滑动窗口
  4. 上海全国物理竞赛结果两次公示名单不同遭质疑-保送政策-获奖公示-物理竞赛
  5. 自弃者扶不起,自强者击不倒
  6. 刘若英携丈夫现身杭州 谈及隐私变得“太难搞”(图)
  7. 古永锵公开向政府示好
  8. 附加数据库时出错问题处理
  9. 为什么要重装系统,重装系统有什么快捷的办法
  10. MACE(1)-----环境搭建