Ural 1260 A nudnik photographer(DP)

A nudnik photographer

 

大意:

對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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章