题意:将U,L放入一列长为n的盒子中,要求至少有三个U相连,问有几种方法。
解题思路:
我们可以用总数减掉不符合题意的即为答案。你多写几种情况就能发现,DP方程为:
dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
代码:
#include <iostream>
using namespace std;
const int maxn = 40;
int dp[maxn];
void solve() {
dp[1] = 2;
dp[2] = 4;
dp[3] = 7;
for (int i = 4; i <= maxn; i++) {
dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
}
return ;
}
int main() {
int n;
solve();
while(cin >> n && n != 0) {
long long ans = (1<<n) - dp[n];
cout << ans << endl;
}
return 0;
}