Ural 1260. A nudnik photographer(dp)

来源:互联网 发布:java 局部变量是什么 编辑:程序博客网 时间:2024/05/16 19:01

题目:对1到N这些数进行排列,1在最左边,相邻的两个数之差不能超过2,求有多少种排列方法?

解法:dp[i] = dp[i-1] + dp[i-3] + 1;

解释:对dp[n],有3种情况:

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

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

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

代码:

#include <cstdio>using namespace std;int main(){    int N;    scanf("%d",&N);    int dp[56];    dp[1] = dp[2] = 1;    dp[3] = 2;        for(int i = 4;i<=N;++i)        dp[i] = dp[i-1]+dp[i-3]+1;        printf("%d\n",dp[N]);        return 0;}


原创粉丝点击