1 条题解

  • 0
    @ 2025-9-9 23:46:52

    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

    信息

    ID
    1052
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者