1 条题解

  • 0
    @ 2022-7-27 11:22:52
    这题可以用递推做
    #include<bits/stdc++.h>
    using namespace std;
    long n,i,j,s,f[1005];
    int main()
    {
    	cin>>n;
        for(i=1;i<=n;i++)
        {
            f[i]=1;//本身
            for(j=1;j<=i/2;j++)//到i的一半
                f[i]+=f[j];//每次累加
        }
        cout<<f[n];
    	return 0;
    }
    记忆化版
    不加记忆化90!
    震惊了我都,数据太水!
    #include<bits/stdc++.h>
    using namespace std;
    long n,i,j,s,f[1005];
    long dg(long n)
    {
    	if(n==1)return 1;
    	long s=1,i;
    	for(i=1;i<=n/2;i++)//思路很简单
    	{
    		if(!f[i]){
    			s+=dg(i);
    			f[i]=dg(i);//记忆化
    		}
    		else s+=f[i];//出现过直接调用
    	}
    	return s;
    }
    int main()
    {
    	cin>>n;
    	cout<<dg(n);
    	return 0;
    }
    • 1

    信息

    ID
    59
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    (无)
    递交数
    21
    已通过
    13
    上传者