NYOJ-469 擅长排列的小明 II AC 分类: NYOJ 2014-01-02 22:19 159人阅读 评论(0) 收藏


最初的第一印象是和组合数一个性质的题目。所以用了回溯法,结果,你懂的。。。

#include<stdio.h>
#include<math.h>
void dfs(int n,int d,int num[]);
int k=0;
int max=0;

int main(){
	
	while(scanf("%d",&k)!=EOF){
		int num[57]={0};
		num[1]=1;
		dfs(1,1,num);
		printf("%d\n",max);
		max=0;
	}
	return 0;
}

void dfs(int n,int d,int num[]){
	int m;
	if(n==k){
		max++;
		return ;}

	for(m=1;m<=k;m++){
		if((!num[m])&&((fabs(m-d))<=2)){
			num[m]=n+1;
			dfs(n+1,m,num);
			num[m]=0;
		}
	}
}


结果看完解题报告,原来是斐波那契数列。。。。

#include <stdio.h>
int main()
{
    int i,f[60],n;

    f[1]=f[2]=1;   
	f[3]=2;
    for(i=4;i<56;i++){
    	f[i]=f[i-1]+f[i-3]+1;
    }    
    while(scanf("%d",&n)!=EOF){
        printf("%d\n",f[n]);
		}

    return 0;
}

各种纠结,不过,开心的是,我居然用搜索写出来了,虽然没过,但是也是有进步的啦

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2014-01-02 22:19  天I火  阅读(107)  评论(0编辑  收藏  举报