CodeForces - 633D Fibonacci-ish 大数标记map+pair的使用
Fibonacci-ish
Yash has recently learnt about the Fibonacci sequence and is very excited about it. He calls a sequence Fibonacci-ish if
- the sequence consists of at least two elements
- f0 and f1 are arbitrary
- fn + 2 = fn + 1 + fn for all n ≥ 0.
You are given some sequence of integers a1, a2, ..., an. Your task is rearrange elements of this sequence in such a way that its longest possible prefix is Fibonacci-ish sequence.
Input
The first line of the input contains a single integer n (2 ≤ n ≤ 1000) — the length of the sequence ai.
The second line contains n integers a1, a2, ..., an (|ai| ≤ 109).
Output
Print the length of the longest possible Fibonacci-ish prefix of the given sequence after rearrangement.
Examples
3
1 2 -1
3
5
28 35 7 14 21
4
Note
In the first sample, if we rearrange elements of the sequence as - 1, 2, 1, the whole sequence ai would be Fibonacci-ish.
In the second sample, the optimal way to rearrange elements is , , , , 28.
从已知元素中寻找最长斐波那契长度。
个人非常喜欢的一道题,比较综合。用到了一些套路,比如用map标记大数,以及加上pair来标记一组数。
开始有往dp方向考虑,想先给数列排个序,然后依次往右找。但是两数相加不一定会变大,和可能会在左边,比如本题负数情况。
再一个每次寻找下一个值时,都要重新使用标记,为了防止后效性,使用递归来处理。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<set>
#include<map>
#include<algorithm>
#define MAX 1005
#define INF 0x3f3f3f3f
using namespace std; int a[MAX],c;
map<int,int> mp;
map<pair<int,int>,int> mmp;
void dfs(int x,int y){ //递归寻找 if(mp[x+y]>) {
c++;
mp[x+y]--;
dfs(y,x+y);
mp[x+y]++;
}
}
int main()
{
int n,i,j;
scanf("%d",&n);
for(i=;i<=n;i++){
scanf("%d",&a[i]);
mp[a[i]]++; //大数标记
}
int max=;
for(i=;i<=n;i++){
for(j=;j<=n;j++){ //考虑负数情况
if(i!=j){
if(mmp[make_pair(a[i],a[j])]) continue;
mmp[make_pair(a[i],a[j])]=; //标记一对数,优化防T
c=;
mp[a[i]]--;
mp[a[j]]--;
dfs(a[i],a[j]);
mp[a[i]]++;
mp[a[j]]++;
if(c>max) max=c;
}
}
}
printf("%d\n",max);
return ;
}
最新文章
- Java 8 forEach简单例子
- JavaScript 全局属性/函数
- 【niubi-job——一个分布式的任务调度框架】----安装教程
- 【扩展】Canvas绘制列表的尝试
- 关于C语言中的typedef
- VB6关于判断模态窗体的问题
- python--第十六天总结(bootstrap)
- html 的实践
- Cocos Creator 音频API控制调频
- Python 第一个程序_1
- android(java) 开发过程中经验及总结记录
- Android - Navigation Drawer
- 【转】内存分析工具 MAT 的使用
- .Net C#向远程服务器Api上传文件
- SqlServer 删除重复记录
- 查找CPU使用率过高的线程
- Hbase到Solr同步常用操作
- POJ1019 Number Sequence
- 解决:Python爬取https站点时SNIMissingWarning和InsecurePlatformWarning
- sql中递归查询
热门文章
- Elipse clean后无法编译出class文件
- Ajax学习笔记(2)--load()方法
- 如果数据需要被多个应用程序消费的话,推荐使用 Kafka,如果数据只是面向 Hadoop 的,可以使用 Flume
- segnet 编译与测试
- 我的Android进阶之旅------>Handlerr.removeCallbacksAndMessages(null)的作用
- centos 7 PostgreSQL一些简单问题以及解决办法
- Codeforces Round #553 (Div. 2) 题解
- join()方法作用
- ios审核过程十大常见被拒问题
- linux应用之bugfree的安装及配置