zoukankan      html  css  js  c++  java
  • 集合的划分

    【寻物启示】继续找我的脑子,麻烦各位了

    【题目背景】

      公元2020年,一群科学家通过佩奇的遗传基因克隆出了许多佩奇,想让她们去往不同的时空带给小朋友们快乐

    【题目描述】

      设s是n只佩奇最开始所在的时空,s = {peppa1,peppa2,……,peppan},现将s划分成K个满足下列条件的子时空是s1,s2,……sk,且满足:

    1、任何一个时空中都必须有一只佩奇  

    2、佩奇不可以分身,所以任意两个时空中的佩奇是不能重复的  

    3、所有时空的佩奇加在一起等于n只佩奇

    则称s1,s2,,……,sk是时空s的一个划分。它相当于把s时空中的n只佩奇peppa1,peppa2,……peppan放入k个(0<k<=n<30)相同的子时空中,使得没有一个子时空没有佩奇的存在。请你确定n只佩奇peppa1,peppa2,……peppan放入k个相同的子时空中的划分数s(n,k)。

    【输入】一行两个整数n、k

    【输出】一行,一个整数s(n,k)

    【样例输入】10 6

    【样例输出】22827

    【代码】

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cmath>
     4 #include<iostream>
     5 #include<cstring>
     6 using namespace std;
     7 int s(int n,int k)//递归 
     8 {
     9     if(k == 1) return 1;//如果只有一个时空,那么一定只有一种划分数 
    10     else if(k > n) return 0;//如果佩奇的数量小于时空的数量,则不能保证每个时空都至少有一个佩奇,划分数为0 
    11     else
    12     return s(n - 1,k - 1) + k * s(n - 1,k);//当一个时空只有一只peppa1时,则剩下k-1个时空n-1只peppa的划分数为s(n-1,k-1) 
    13 0}//当peppa1存在的时空还有其他peppa存在,则k个时空n-1只peppa的划分数要用 k * s(n - 1,k)来表示 
    14 int main()
    15 {
    16     int n,k;
    17     scanf("%d%d",&n,&k);
    18     printf("%d",s(n,k));
    19     return 0;
    20 }

    【end】

  • 相关阅读:
    C# 文件压缩与解压(ZIP格式)
    sqlite 报 no such table 错误
    又一次的轮回
    什么是数据结构
    紧张繁忙的一周
    《编程匠艺》读书笔记之十九
    [转]软件开发者面试百问
    关于学习设计模式的一些废话
    雷人的山寨版搜索引擎
    [转]Struts 2.1发布
  • 原文地址:https://www.cnblogs.com/peppa/p/8478033.html
Copyright © 2011-2022 走看看