记f[i]为在长度是i的格子上面至少放一个木桩的方法数。考虑第i个格子,有放和不放两种情况。
1.如果第i个格子放了一个木桩,则i - 1和i - 2格子上面不能放木桩,方案数为:f[i - 3] + 1
2.如果第i个格子没有放木桩,则方案数为:f[i - 1]
然后递推即可。
1 #include <iostream> 2 using namespace std; 3 4 typedef long long ll; 5 const int N = 61; 6 ll f[N]; 7 8 void init() 9 { 10 f[1] = 1; 11 f[2] = 2; 12 f[3] = 3; 13 for ( int i = 4; i < N; i++ ) 14 { 15 f[i] = f[i - 1] + f[i - 3] + 1; 16 } 17 } 18 19 int main () 20 { 21 init(); 22 int n; 23 while ( cin >> n ) 24 { 25 cout << f[n] << endl; 26 } 27 return 0; 28 }
时间: 2024-10-06 15:55:44