nyoj-0469-擅長排列的小明 II(找規律)
阿新 • • 發佈:2018-04-28
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(找規律)