3 条题解

  • 1
    @ 2024-4-12 14:06:16

    多写几组数据就很好写出递推公式了

    #include<bits/stdc++.h>
    #define endl '\n'
    #define int long long
    using namespace std;
    signed main()
    {
        ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
        int n;
        cin>>n;
        vector<int> dp(1000+1,0);
        dp[1]=1;
        for(int i=2;i<=1000;i++){
          if(i%2==1){
            dp[i]=dp[i-1];
          }else{
            dp[i]=dp[i-1]+dp[i/2];
          }
        }
        cout<<dp[n];
        return 0;
    }
    
    • 0
      @ 2025-3-30 15:25:40
      #include <bits/stdc++.h>
      using namespace std;
      const int N=1010;
      int n;
      int mem[N];
      int f(int x){
          if(mem[x]) return mem[x];
          int t=x/2;
          int sum=1;
          for(int i=1;i<=t;i++){
              sum+=f(i);
          }
          return mem[x]=sum;
      }
      
      int main(){
          cin>>n;
          cout<<f(n);
          return 0;
      }
      
      • 0
        @ 2024-4-12 21:36:57

        记忆化搜索

        #include <iostream>
        using namespace std;
        
        const int N = 1010;
        
        int n;
        int dp[N];
        
        int f(int x)
        {
        	if (dp[x]) return dp[x];
        	int sum = 1;
        	for (int i = 1; i * 2 <= x; i++)
        	{
        		sum += f(i);
        	}
        	return dp[x] = sum; // 把之前得到的解决方案保存起来, 减少递归次数
        }
        
        void solve()
        {
        	cin >> n;
        	cout << f(n) << endl;
        }
        
        int main()
        {
        	solve();
        	return 0;
        }
        
        • 1

        信息

        ID
        86
        时间
        1000ms
        内存
        256MiB
        难度
        5
        标签
        递交数
        246
        已通过
        89
        上传者