博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
集合的划分(递归)
阅读量:7070 次
发布时间:2019-06-28

本文共 673 字,大约阅读时间需要 2 分钟。

题目描述

设s是一个具有n个元素的集合,s={a1,a2,…,an},现将s划分成k个满足下列条件的子集合s1,s2,…,sk,满足:
(1)si≠ф
(2)si∩sj=ф (1≤i,j≤k i≠j)
(3)s1∪s2∪s3∪…∪sk=s
则s1,s2,…,sk是集合的一个划分。它相当于把s集合中的n个元素a1,a2,…,an放入k个(0 < k≤n < 30)无标号的盒子中,使得没有一个盒子为空。请你确定n个元素a1,a2,…,an放入k个无标号盒子中去的划分数s(n,k)。

输入

输入为一行:n k

输出

输出为一个整数

样例输入

4 3
样例输出
6

基本思路:

对于把n个元素放入k个集合

@1:如果a(n)是一个独立集合,那么

s(n,k)=s(n-1,k-1)

也就是和n-1元素放入k-1集合的划分数一样

 

@2:如果a(n)是附加进入其他集合,那么

s(n,k)=k*s(n-1,k)

在n-1元素放入k个集合的基础上,a(n)有k种选择,所以是k*s(n-1,k)

@3.最后注意一下当s(n,k)等于0或1的边界条件就好了

 

代码:

#include
using namespace std;int n,k;int jihe(int n,int k){ if(k==0||n
>n>>k; printf("%d",jihe(n,k));}

 

转载于:https://www.cnblogs.com/zyacmer/p/10053807.html

你可能感兴趣的文章
PowerShell获取系统日志
查看>>
VI批量替换文本,多行删除,复制,移动
查看>>
CSS控制DIV两列左右高度一致
查看>>
AndroidStudio无法引用RecyclerView
查看>>
怎么调试React,使用Chrome引入的source-map文件
查看>>
opengl 关键函数解析
查看>>
ngx_lua常用变量参数
查看>>
替换文件夹中特定字符串工具类
查看>>
chrome使用百度搜索卡死 解决办法
查看>>
linux开机自启动命令
查看>>
TabBar with Expands
查看>>
使用GCD的dispatch_once创建单例
查看>>
jpa中的一对多级联删除
查看>>
面试需要的基础知识-二维数组中的查找
查看>>
开源 java CMS - FreeCMS2.8 数据对象 dictionaryClass
查看>>
Android应用安全开发之浅谈加密算法的坑
查看>>
MySQL ERROR 1071 (42000): Specified key was too...
查看>>
OPENCART模板 5 折
查看>>
OptionsMenu 详解
查看>>
linux 下 apache 单独安装独立模块
查看>>