标签:
小明十分聪明,而且十分擅长排列计算。
有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2,3,4,5......n满足以下情况的排列:
1、第一个数必须是1
2、相邻两个数之差不大于2
你的任务是给出排列的种数。
4
4
本来用的是深搜,结果超时了,在讨论组组里看到可以找规律,这个规律很难找啊,以后要多多观察。可以把自己超时代码,输入输出数据来找规律。
超时代码:
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<string.h>
using namespace std;
int visited[55];
int p[55],count;
void dfs(int cur,int n)
{
int i;
if(cur==n)
{
count++;
return;
}
for(i=2;i<=n;i++)
{
if(!visited[i] && fabs(i-p[cur-1])<=2)
{
visited[i]=true;
p[cur]=i;
dfs(cur+1,n);
visited[i]=false;
}
}
}
int main()
{
int n,cur;
while(scanf("%d",&n)!=EOF)
{
memset(visited,false,sizeof(visited));
p[0]=1;
cur=1;
count=0;
dfs(cur,n);
cout<<count<<endl;
}
return 0;
}ac代码:#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n,i,f[56];
f[0]=0;
f[1]=1;
f[2]=1;
for(i=3;i<=55;i++)
{
f[i]=f[i-1]+f[i-3]+1;
}
while(scanf("%d",&n)!=EOF)
{
cout<<f[n]<<endl;
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/zuguodexiaoguoabc/article/details/45342155