NYOJ469(动态规划)

解题思路:题意很明确,就是让求满足条件:1、第一个数必须是1;2、相邻两个数之差不大于2 的排列的种数。

可以得出递推公式:f[i]=f[i-1]+f[i-3]+1,其中 f[n]即为所求。

View Code
 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int i,n,f[60];
 8     f[1]=1;
 9     f[2]=1;
10     f[3]=2;
11     for(i=4;i<60;i++)
12         f[i]=f[i-1]+f[i-3]+1;
13     while(cin>>n)
14     {
15         cout<<f[n]<<endl;
16     }
17     return 0;
18 }

 

 

posted @ 2012-03-28 09:17  笑巧  阅读(166)  评论(0编辑  收藏  举报