1 solutions

  • 0
    @ 2025-11-5 14:58:50

    C :

    #include <stdio.h>
    #define maxn 300
     
     int f[maxn][maxn];
       int n,m;
       
       int main()
       {
           scanf("%d%d",&n,&m);
          f[0][0]=1;
          for (int i=1;i<=n;++i)
              for (int j=1;j<=m;++j)
                  if (i-j>=0)
                      f[i][j]=f[i-j][j]+f[i-1][j-1];
          printf("%d\n",f[n][m]);
          return 0;
      }
      
    

    C++ :

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<ctime>
    #include<cmath>
    #include<string>
    #include<cstdio>
    using namespace std;
    
    //生成测试数据
    void initData()
    {
        srand((int)time(NULL));
        for(int cas = 0; cas < 10; ++cas)
        {
    
        }
    }
    
    int dfs(int n, int k, int x)
    {
        if(k == 1) return 1;
        if(n == k) return 1;
        if(n <= 0 || k <= 0) return 0;
        int s = 0;
        for(int i = x; i <= n/k; ++i)
        {
            s += dfs(n - i, k - 1, i);
        }
        return s;
    }
    
    int main()
    {
        //freopen("test.in", "w", stdout);
        //freopen("test.in", "r", stdin);
        //freopen("test.out", "w", stdout);
        //initData();
        int n, k;
        cin>>n>>k;
        cout<<dfs(n, k, 1)<<endl;
        return 0;
    }
    
    
    • 1

    Information

    ID
    16292
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By