zoukankan      html  css  js  c++  java
  • 【CF633D】Fibonacci-ish

    题目描述

      小y最近迷上了fibonacci数列,他定义了一种数列叫类fibonacci数列:

       1.这个数列包含至少(2)个元素

       2.(f_0)(f_1)是任意选取的

       3.(f_{n+2}=f_{n+1}+f_n (ngeq 0))

      现在,给出一个数列(a_1ldots a_n),你可以改变数列元素的顺序,使得(a_1ldots a_m)满足类fibonacci数列的条件,请求出最大的(m)

      (nleq 1000)

    题解

      如果有(0),就先统计(0)的个数,然后把这些(0)删掉。

      首先这个东西的长度是(O(log a_i))的。

      暴力枚举前两个,查找是否存在第三个。

      可以预处理出来。

      时间复杂度:(O(n^2log n))

    代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cstdlib>
    #include<ctime>
    #include<utility>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef pair<int,int> pii;
    ll a[510];
    int b[510];
    int n;
    int c[510][510];
    int d1[510];
    int d2[510];
    int e[510];
    int main()
    {
    	freopen("a.in","r",stdin);
    	freopen("a.out","w",stdout);
    	int i,j,k;
    	scanf("%d",&n);
    	if(n==1)
    	{
    		printf("%d
    ",0);
    		return 0;
    	}
    	for(i=1;i<=n;i++)
    		scanf("%lld",&a[i]);
    	sort(a+1,a+n+1);
    	int m=0;
    	for(i=1;i<=n;i++)
    		if(i==1||a[i]!=a[i-1])
    		{
    			d1[++m]=a[i];
    			d2[m]=1;
    		}
    		else
    			d2[m]++;
    	for(i=1;i<=m;i++)
    		for(j=1;j<=m;j++)
    		{
    			k=lower_bound(d1+1,d1+m+1,d1[i]+d1[j])-d1;
    			if(k>m||d1[k]!=d1[i]+d1[j])
    				c[i][j]=0;
    			else
    				c[i][j]=k;
    		}
    	int ans=0;
    	for(i=1;i<=n;i++)
    	{
    		d2[i]--;
    		for(j=1;j<=n;j++)
    			if(d2[j])
    			{
    				d2[j]--;
    				for(k=1;k<=m;k++)
    					e[k]=d2[k];
    				ll s1=i;
    				ll s2=j;
    				int num=2;
    				while(c[s1][s2]&&e[c[s1][s2]])
    				{
    					e[c[s1][s2]]--;
    					swap(s1,s2);
    					s2=c[s1][s2];
    					num++;
    				}
    				ans=max(ans,num);
    				d2[j]++;
    			}
    		d2[i]++;
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    Python操作MySQL数据库
    Spark学习--Structured Streaming
    YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
    Spark学习--SparkStreaming
    Spark学习--SparkSQL04
    Spark学习--SparkSQL03
    Spark学习--SparkSQL02
    Bootstrap简介
    Linux Shell系列教程之(一)Shell简介
    Linux命令之必须掌握的十条命令
  • 原文地址:https://www.cnblogs.com/ywwyww/p/8511394.html
Copyright © 2011-2022 走看看