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】

  • 相关阅读:
    数码管模块
    iis报mmc检测错误解决办法
    图片显示加时间戳
    C#.Net上传文件大小限制设置
    DoNet 打包,能够自动生成数据库(可以执行某些exe,vbs文件)
    aspx模式窗口
    aspx页面不能及时更新数据
    aspx 页面提交造成页面样式混乱
    MSSQL中返回刚插入记录的ID
    修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
  • 原文地址:https://www.cnblogs.com/peppa/p/8478033.html
Copyright © 2011-2022 走看看