2 solutions

  • 0
    @ 2024-8-2 12:00:50
    #include<bits/stdc++.h>
    using namespace std;
    const int N=210;
    vector<int> f[N];
    int mul(vector<int> v)
    {
    	int t=0;
    	reverse(v.begin(),v.end());
    	for(int i=0;i<v.size();i++)
    	{
    		int w=v[i];
    		v[i]=w*2%10+t;
    		t=w 
    	}
    }
    int main()
    {
    	int n;
    	cin>>n;
    	f[1].push_back(2);
    	for(int i=2;i<=n;i++)
    }
    
    
    • 0
      @ 2024-6-5 14:24:18

      递推(70分)

      【算法分析】 设fnf_n是将nn层双塔从AA移动到CC柱子的方案数目,那么通过单层汉诺塔易得fn+2=2fn+2f_{n+2}=2*f_n+2,中间的那步需要两次。 【代码实现】

      #include<bits/stdc++.h>
      using namespace std;
      typedef long long LL;
      const int N=210;
      LL f[N];
      int main()
      {
          int n;
          cin>>n;
          f[0]=0; //初始化
          for(int i=1;i<=n;i++)
          {
              f[i]=f[i-1]*2+2; //递推
          }
          cout<<f[n];
          return 0;
      }
      

      递推+高精度

      #include<bits/stdc++.h>
      using namespace std;
      const int N=210;
      int a[N];
      //f[i]表示2*i个盘子需要的移动次数
      //递推式 f[i]=2*f[i-1]+2(最大的盘子一共有两个) 
      void work()
      {
          for(int i=0;i<N;i++) //高精度乘以低精度模板 
          {
              a[i]*=2;
          }
          a[0]+=2;//+2
          for(int i=0;i<N;i++) //处理进位模板 
          {
              a[i+1]=a[i+1]+a[i]/10;
              a[i]%=10;
          }
      }
      int main()
      {
          int n;
          scanf("%d",&n);
          a[0]=0; //初始化 
          for(int i=1;i<=n;i++)
          {
              work();
          }
          int len=N-1;
          while(len>0&&a[len]==0) len--;
          for(int i=len;i>=0;i--)
          {
              cout<<a[i];
          }
          return 0;
      } 
      
      
      • 1

      Information

      ID
      420
      Time
      1000ms
      Memory
      128MiB
      Difficulty
      9
      Tags
      # Submissions
      10
      Accepted
      4
      Uploaded By