大意:
對1到N這些數進行排列,1必須要在最左邊,相鄰的兩個數之間的差值不能超過2,問有多少種排列的方法。
思路:
對座位進行DP,當第一個是1,第二個是2的時候,組合爲dp[i-1];當第一個是1,第二個是3的時候,第三個也確定了是2,組合爲dp[i-3];還有最後一種情況是1357……8642。
所以DP方程爲dp[i] = dp[i-1]+dp[i-3]+1。
#include <stdio.h>
int n;
int dp[100];
int main()
{
scanf("%d", &n);
dp[1] = 1;
dp[2] = 1;
dp[3] = 2;
dp[4] = 4;
for(int i = 5; i <= 55; ++i){
dp[i] = dp[i-1]+dp[i-3]+1;
}
printf("%d", dp[n]);
return 0;
}