2 条题解

  • 0
    @ 2024-6-15 21:06:06

    初始状态:1,1,2 核心代码:

    for(int i=3;i<=n;i++)f[i]=f[i-1]+f[i-2]+f[i-3];
    

    注意溢出错误

    • 0
      @ 2024-6-11 20:28:07

      很经典的递推问题,设 f[i]f[i] 表示 ii 个台阶时的方案,那么有:

      f[i]={1,i=12,i=24,i=3f[i1]+f[i2]+f[i3],i>3f[i]=\begin{cases} 1,\,i=1\\ 2,\,i=2\\ 4,\,i=3\\ f[i-1]+f[i-2]+f[i-3],\,i>3 \end{cases}

      但这题的难点在于不开long long见祖宗

      #include<bits/stdc++.h>
      #define ll long long
      using namespace std;
      const int N=65;
      int n;
      ll f[N]={0,1,2,4};
      int main(){
      	scanf("%d",&n);
      	for(int i=4;i<=n;i++)
      		f[i]=f[i-1]+f[i-2]+f[i-3];
      	printf("%lld",f[n]);
      	return 0;
      }
      
      
      • 1

      信息

      ID
      798
      时间
      1000ms
      内存
      512MiB
      难度
      3
      标签
      递交数
      95
      已通过
      51
      上传者