6 条题解
-
11
思路
$\\$($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
#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; }
拿走不谢
- 1
信息
- ID
- 262
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- (无)
- 递交数
- 793
- 已通过
- 486
- 上传者