1 条题解

  • 0
    @ 2025-2-16 19:53:30
    #include<bits/stdc++.h>
    using namespace std;
    int n,f[40][1000],num;
    int main()
    {
        cin>>n;
        num=n*(n+1)/2;
        if(num%2!=0)
        {
            cout<<0;
            return 0;
        }
        f[1][0]=1;
        f[1][1]=1;//初始化无法再分解的
        for(int i=2;i<=n;i++)//1已经被初始化过了
        {
            for(int j=0;j<=num;j++)//j还是得从0开始枚举,因为初始化的是
            //f[1]的所有情况,并且后面每次枚举i的时候,j每种情况都要枚举一遍
            {
                if(j>i) f[i][j]=f[i-1][j]+f[i-1][j-i];
                else f[i][j]=f[i-1][j];
            }
        }
        cout<<f[n][num/2]<<endl;
        return 0;
    }
    

    信息

    ID
    116
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    60
    已通过
    9
    上传者