6 条题解

  • 11
    @ 2023-7-6 16:33:00
    思路 $\\$($1$)状态定义: $\\$定义$f[i]$为取$i$个数的方案数。 $\\$($2$)初始状态: $\\$$f[1]$为取$1$个数的方案数,有取或者不取$2$种,所以$f[1]=2$。 $\\$$f[2]$为取$2$个数的方案数,有取左边或者取右边或者不取$2$种,所以$f[2]=3$。 $\\$($3$)状态转移方程: $\\$对于$f[i]$而言有2种情况取第$i$个数或者不取。 $\\$如果取第$i$个数,那么不能取第$i-1$个数,前面$i-2$的随意方案数为$f[i-2]$. $\\$如果不取第$i$个数,那么前面$i-1$个数的随意方案数为$f[i-1]$. $\\$所以状态转移方程为:$f[i]=f[i-1]+f[i-2];$
    代码
    
    #include<bits/stdc++.h>
    using namespace std;
    long long f[55];
    int main()
    {
    	int n;
    	cin>>n;
    	f[1]=2;
    	f[2]=3;
    	for(int i=3;i<=n;i++)
    		f[i]=f[i-1]+f[i-2];
    	cout<<f[n];
    	return 0;
    }
    
    
  • 5
    @ 2023-7-29 16:32:35
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int countWays(int n) {
        vector<long long> dp(n + 1, 0);
        dp[0] = 1;
        dp[1] = 2;
        for (int i = 2; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
    
    int main() {
        int n;
    
        cin >> n;
        int result = countWays(n);
        cout << result << endl;
        return 0;
    }
    

    拿走不谢

    • @ 2023-9-19 15:28:43

      帮你化简,拿走不谢:

      #include <iostream>
      using namespace std;
      int main() 
      {
          int n, dp[55];
          cin >> n;
          dp[0] = 1;
          dp[1] = 2;
          for (int i = 2; i <= n; i++) 
          {
              dp[i] = dp[i - 1] + dp[i - 2];
          }
          cout << dp[n];
          return 0;
      }
      
      
  • 4
    @ 2023-9-1 20:11:43

    这是本人第2次写题解 ~非常垃圾~ 请多多指教♪(・ω・)ノ 下面是代码:

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    int f[55],n;
    cin>>n;
    f[1]=2,f[2]=3;
    for(int i=3;i<=n;i++) f[i]=f[i-1]+f[i-2];
                                                                                                                                                                                                                                                       cout<<"你居然抄题解";
    cout<<f[n];
    return 0;}
    

    不要抄袭!不要抄袭!不要抄袭! (各位大神帮帮忙,我的代码能不能再短一点)

    • @ 2024-3-9 19:33:45
      cout<<"你居然抄题解";
      

      这是什么意思????? 果然笑里藏刀!!

    • @ 2024-3-30 16:26:29
      for(int i=3;i<=n;i++) f[i]=f[i-1]+f[i-2];
                                                                                                                                                                                                                                                         cout<<"你居然抄题解";
      
    • @ 2024-3-30 16:28:52
      for(int i=3;i<=n;i++) f[i]=f[i-1]+f[i-2];
                                                                                                                                                                                                                                                         cout<<"你居然抄题解";
      

      往右拉,有好东西

    • @ 2024-3-30 16:30:00
      #include<bits/stdc++.h>
      using namespace std;
      int main(){
      int f[55],n;
      cin>>n;
      f[1]=2,f[2]=3;
      for(int i=3;i<=n;i++) f[i]=f[i-1]+f[i-2];
      cout<<"你居然抄题解";
      cout<<f[n];
      return 0;}
      

      往右拉,有好东西

  • 1
    @ 2024-4-27 13:29:41
    #include <bits/stdc++.h>//hetao1802625
    using namespace std;
    int n,a[100001];
    int main(){
        cin >> n;
        a[0] = 1;//注意从零开始
        a[1] = 2;
        for(int i = 2;i <= n;i++){
            a[i] = a[i-1]+a[i-2];//用斐波那契来求
        }
        cout << a[n];//输出
        return 0;
    }
    
    • 1
      @ 2024-1-21 19:34:36

      斐波那契数列

      #include <bits/stdc++.h>
      using namespace std;
      int f[55], n;
      int main()
      {
          cin >> n;
          f[0] = 1;
          f[1] = 2;
          for (int i = 2;i <= n;i++)
          {
              f[i] = f[i - 1] + f[i - 2];
          }
          cout << f[n];
          return 0;
      }
      
      • 1
        @ 2023-8-1 20:09:29

        动态规划

        #include <bits/stdc++.h>
        using namespace std;
        int main() {
        	int n;
        	cin >> n;
        	int dp[10000];
        	dp[0] = 1;
        	dp[1] = 2;
        	for (int i = 2; i <= n; i++) {
        		dp[i] = dp[i - 1] + dp[i - 2];
        	}
        	cout << dp[n] << endl;
        	return 0;
        }
        
        • 1

        信息

        ID
        262
        时间
        1000ms
        内存
        256MiB
        难度
        2
        标签
        (无)
        递交数
        793
        已通过
        486
        上传者