4 solutions

  • 5
    @ 2024-1-26 10:44:30

    `

    #include<iostream>
    using namespace std;
    long long s(long long n,long long k){
    	if((n < k) || (k == 0)) return 0;
    	if((k == 1) || (k == n)) return 1;
    	return s(n - 1,k - 1) + k * s(n - 1,k);
    }
    int main(){
    	long long n,k;
    	cin >> n >> k;
    	cout << s(n,k);
    	return 0;
    }
    
  • 2
    @ 2024-1-27 11:14:14
    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll n,k;
    ll S(ll n,ll k){
    	if(n<k||!k) return 0;
    	if(k==1||k==n) return 1;
    	return S(n-1,k-1)+k*S(n-1,k);
    }
    int main(){
    	cin>>n>>k;
    	cout<<S(n,k)<<"\n";
    	return 0;
    }
    

    一本通代码搬运,非本人代码

    • 1
      @ 2025-3-5 16:34:21

      题意:

      设S是一个具有n个元素的集合,S=⟨a1,a2,……,an⟩S=⟨a1​,a2​,……,an​⟩,现将S划分成k个满足下列条件的子集合S1,S2,……,SkS1​,S2​,……,Sk​ ,且满足:

      1.Si≠∅Si​=∅

      2.Si∩Sj=∅Si​∩Sj​=∅ (1≤i,j≤k,i≠j1≤i,j≤k,i=j)

      3.S1∪S2∪S3∪…∪Sk=SS1​∪S2​∪S3​∪…∪Sk​=S

      则称S1,S2,……,SkS1​,S2​,……,Sk​是集合S的一个划分。它相当于把S集合中的n个元素a1,a2,……,ana1​,a2​,……,an​ 放入kk个(0<k≤n<300<k≤n<30)无标号的盒子中,使得没有一个盒子为空。请你确定nn个元素a1,a2,……,ana1​,a2​,……,an​ 放入kk个无标号盒子中去的划分数S(n,k)S(n,k)。

      代码:

      #include<bits/stdc++.h>
      using namespace std;
      long long p(long long n,long long k){
      	if(n<k||k==0)return 0;
      	if(k==n||k==n)return 1;
      	return p(n-1,k-1)+k*p(n-1,k);
      }
      int main(){
      	long long n,k;
      	cin>>n>>k;
      	cout<<p(n,k);
      	return 0;
      }
      
      • 0
        @ 2025-2-10 21:10:20
        #include <bits/stdc++.h>
        
        using namespace std;
        int n, k;
        long long dfs(long long w,long long v) { //w:还剩多少元素,v:还剩多少个盒子没放
        	if (v == 0 || w < v) {
        		//分完了或不能再分时返归0
        		return 0;
        	}
        	if (v == 1 || w == v) {
        		//分够k个盒子或分到只剩一个时(剩下的放这个盒子里)返回1
        		return 1;
        	}
        	//(w-1,v-1):某一个数单独一个盒子装,其他已经放好了
        	//(w-1,v)*k:某一个数可以放任意盒子,有k种方法
        	return dfs(w - 1, v - 1) + dfs(w - 1, v) * v;
        }
        
        int main() {
        	cin >> n >> k;
        	cout << dfs(n, k);
        	return 0;
        }
        
        • 1

        Information

        ID
        800
        Time
        1000ms
        Memory
        256MiB
        Difficulty
        3
        Tags
        # Submissions
        56
        Accepted
        29
        Uploaded By