您的位置:首页 > 其它

URAL 1260 Nudnik Photographer(递推)

2014-04-14 11:11 381 查看
题目链接

题意 : 给你1到n这n个数,排成一排,然后1放在左边最开始,剩下的数进行排列,要求排列出来的数列必须满足任何两个相邻的数之间的差不能超过2,问你有多少种排列

思路 : 对于dp
, n个人时求F
。第2个位置放2时有F[n-1]种;第2个位置放3,第3个位置放2,第4个位置只能放4,有F[n-3]种;第2个位置放3,第3个位置放5,13578642,有1种;第2个位置放3,第3个位置不能放4。

所以:

1、12……(dp[n-1])

2、1324……(dp[n-3])

3、1357……8642(一种确定的情况)

//URAL 1260
#include <stdio.h>
#include <string.h>
#include <iostream>

using namespace std ;
int dp[57] ;

void chart()
{
dp[1] = dp[2] = 1 ;
dp[3] = 2 ;
for(int i = 4 ; i <= 56 ; i++)
dp[i] = dp[i-1]+dp[i-3]+1 ;
}
int main()
{
int n ;
chart() ;
while(~scanf("%d",&n))
{
printf("%d\n",dp
) ;
}
return 0 ;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: