1. 程式人生 > >nyoj-0469-擅長排列的小明 II(找規律)

nyoj-0469-擅長排列的小明 II(找規律)

for 題意 序列 簡便 DC span names n-1 href

nyoj-0469-擅長排列的小明 II

思路:遞推
分析:為了簡便起見,我們用Ai代表第i個數字 , 由於A1一直是1,所以A2只能是2或3。假設dp[n]表示1->n這個序列的方案數
1.當A2=2時,從A2到An的排列(2~n)相當於從A1到An-1的排列(1~n-1)(把每個數字都加1),一共有dp[n-1]種情況。
2.當A2=3時,A3可能為2,4,5。
1、當A3=2時,A4一定等於4,此時從A4到An的排列(4~n)相當於從A1到An-3的排列(把每個數字都加3),一共有dp[n-3]種情況。
2、當A3=4時,不管A4取不取2,都不能形成滿足題意的排列,故此種情況不可能發生。
3、當A3=5時,排列只可能是1 ,3, 5,7,9......10,8,6,4,2,所以一共有1種情況。
3綜上所述,dp[n]=dp[n-3]+dp[n-1]+1;(n>3)

代碼:

#include<bits/stdc++.h>
using namespace std;
int n, ans;
int dp[60];
int main() {
    dp[1] = 1; dp[2] = 1; dp[3] = 2;
    for(int i = 4; i <= 55; i++) 
        dp[i] = dp[i-1] + dp[i-3] + 1;
    while(scanf("%d", &n) == 1) printf("%d\n", dp[n]);
    return 0;     
}

nyoj-0469-擅長排列的小明 II(找規律)