1 条题解

  • 0
    @ 2026-10-7 20:01:09

    大白话思路

    把 m 个相同苹果放在 n 个相同盘子里,先避免重复数同一种摆法。若 m<n,多出的空盘子不影响答案;否则分为“至少一个空盘”与“每盘至少一个苹果”:f(m,n)=f(m,n-1)+f(m-n,n)。m=0 或 n=1 为边界。可记忆化减少重复计算。

    C++17 标准解

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #define N 1000010
    using namespace std;
    int calculate(int m,int n)
    {
        if(m==0||n==1)
            return 1;
        if(m<n)
            return calculate(m,m);
        return calculate(m,n-1)+calculate(m-n,n);
    }
    int main()
    {
        int k;
        int m,n;
        cin>>k;
        while(k--)
        {
            cin>>m>>n;
            cout<<calculate(m,n)<<endl;
        }
        return 0;
    }
    

    来源:HEEKDragonOne/ACM,一本通 1206;固定提交 29b5b378f6257c2d9ba99452d0f5b770a26c826c。仅赛后开放。

    • 1

    信息

    ID
    1007
    时间
    1000ms
    内存
    128MiB
    难度
    8
    标签
    递交数
    22
    已通过
    6
    上传者