【分治法】集合划分问题

简介: 【分治法】集合划分问题

 题目描述:

问题描述:

  n 个元素的集合{1,2,., n }可以划分为若干个非空子集。例如,当n=4 时,集合{1,2, 3,4}可以划分为15 个不同的非空子集如下:

{{1},{2},{3},{4}},

{{1,2},{3},{4}},

{{1,3},{2},{4}},

{{1,4},{2},{3}},

{{2,3},{1},{4}},

{{2,4},{1},{3}},

{{3,4},{1},{2}},

{{1,2},{3,4}},

{{1,3},{2,4}},

{{1,4},{2,3}},

{{1,2,3},{4}},

{{1,2,4},{3}},

{{1,3,4},{2}},

{{2,3,4},{1}},

{{1,2,3,4}}

其中,集合{{1,2,3,4}} 由1 个子集组成;集合{{1,2},{3,4}},{{1,3},{2, 4}},{{1,4},{2,3}},{{1,2,3},{4}},{{1,2,4},{3}},{{1,3,4},{2}},{{2, 3,4},{1}} 由2 个子集组成;集合{{1,2},{3},{4}},{{1,3},{2},{4}},{{1,4}, {2},{3}},{{2,3},{1},{4}},{{2,4},{1},{3}},{{3,4},{1},{2}} 由3 个子集组成;集合{{1},{2},{3},{4}} 由4 个子集组成。

编程任务:

  给定正整数n 和m,计算出n 个元素的集合{1,2,., n }可以划分为多少个不同的由m 个非空子集组成的集合。

数据输入:

  由文件input.txt 提供输入数据。文件的第1 行是元素个数n 和非空子集数m。

结果输出:

  程序运行结束时,将计算出的不同的由m个非空子集组成的集合数输出到文件output.txt 中。

输入文件示例            输出文件示例

input.txt               output.txt

4    3                      6

思路分析:

对{1,2,3}进行划分:

(1)、1个子集:{1,2,3}        即num(3,1)=1

(2)、2个子集:{1,2},{3}    {1,3},{2}     {2,3},{1}        即num(3,2)=3

(3)、3个子集:{1},{2},{3}        即num(3,3)=1

对{1,2,3,4}进行划分为3个子集:

(1),在对{1,2,3}划分为两个子集的结果中加入{4}: {1,2},{3},{4}    {1,3},{2},{4}     {2,3},{1},{4}        此个数为num(3,2)

(2),在对{1,2,3}划分为三个子集的结果中加入元素4:{1,4},{2},{3}        {1},{2,4},{3}        {1},{2},{3,4}        此个数为num(3,3)*3

综上所述:

num(4,3)=num(3,2)+num(3,3)*3

推广至num(n,m)为:        num(n,m)=num(n-1,m-1)+num(n-1,m)*m  

且当 n==m或者m==1时,num(n,m)=1

代码如下:

#include <iostream>
using namespace std;
int num(int n, int m){
    if(n==m||m==1) return 1;
    else{return num(n-1,m-1)+num(n-1,m)*m;}
}
int main()
{
    int n,m;cin>>n>>m;
    cout<<num(n,m)<<endl;
    return 0;
}

image.gif


目录
相关文章
|
存储 算法 NoSQL
还分不清 Cookie、Session、Token、JWT?看这一篇就够了
Cookie、Session、Token 和 JWT(JSON Web Token)都是用于在网络应用中进行身份验证和状态管理的机制。虽然它们有一些相似之处,但在实际应用中有着不同的作用和特点,接下来就让我们一起看看吧,本文转载至http://juejin.im/post/5e055d9ef265da33997a42cc
47612 13
|
负载均衡 Ubuntu 应用服务中间件
|
3月前
|
JSON 前端开发 Go
Go语言实战:创建一个简单的 HTTP 服务器
本篇是《Go语言101实战》系列之一,讲解如何使用Go构建基础HTTP服务器。涵盖Go语言并发优势、HTTP服务搭建、路由处理、日志记录及测试方法,助你掌握高性能Web服务开发核心技能。
|
传感器 数据采集 物联网
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计2
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计
1504 0
|
前端开发 JavaScript UED
深入React Hooks与性能优化实践
深入React Hooks与性能优化实践
202 0
|
算法 编译器 C语言
【C/C++ 编程题 02】用两个栈实现一个队列的功能
【C/C++ 编程题 02】用两个栈实现一个队列的功能
223 0
|
定位技术 Python Windows
彻底卸载并重装Anaconda环境与Python的方法
彻底卸载并重装Anaconda环境与Python的方法
7570 1
成功解决AttributeError: ‘Series‘ object has no attribute ‘columns‘
成功解决AttributeError: ‘Series‘ object has no attribute ‘columns‘
|
网络架构
IP 地址、网络号和主机号、ABC三类、ip地址可分配问题、子网掩码、子网划分
IP 地址、网络号和主机号、ABC三类、ip地址可分配问题、子网掩码、子网划分
1581 0
【分治法】典型题目示例、含详细注释
【分治法】典型题目示例、含详细注释
443 0
【分治法】典型题目示例、含详细注释