题意:

给定n,和一个长度为n的序列。

让你在这n个数中找长度尽可能长的fib数列。

思路:

这题的数字是在1e9范围内的,所以最长的可能存在的fib数列官方的解释是90左右。有一种情况除外,就是0的个数比较多的情况下。

而决定fib数列的是开头的两个数字,以及顺序,介于n是1000的范围我们就可以暴力开头的两个数字啦。这题要注意0的情况,如果整个序列都是0的话,那么复杂度就是1e9了,所以本人先unique了一下,然后每次从unique完的数组里边取材,这样就避免了0的问题同时也某些程度上减少了复杂度。需要注意的是unique完了之后有可能本身和本身作为fib数列的前两个,因为原始序列中可能存在相同的。

坑点:

这题我一开始的思路是记忆话搜索,但是...不能保证记录的那个序列和原来的序列没有在数组中重复取材。记住fib的特性啊啊啊啊

编号和题目中的序列搞混了,WA了两发。

#include<bits/stdc++.h>
using namespace std;
int jilu[],aft[];
bool vis[];
int n;
int ans=;
void dfs(int bf,int sum,int step){
int id=lower_bound(jilu,jilu+n,sum)-jilu;
if(id>=n||(id==&&jilu[]!=sum)){
if(ans<step)
ans=step;
}
else if(!vis[id]){
if(jilu[id]==sum){
vis[id]=;
dfs(sum,bf+sum,step+);
}
else{
if(ans<step)
ans=step;
}
}
else{
while(id<n&&vis[id]&&jilu[id]==sum){
id++;
}
if(id>=n||vis[id]||jilu[id]!=sum){
if(ans<step)
ans=step;
}
else{
vis[id]=;
dfs(sum,sum+bf,step+);
}
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d",&jilu[i]);
aft[i]=jilu[i];
}
sort(aft,aft+n);
sort(jilu,jilu+n);
int num=unique(aft,aft+n)-aft;
for(int i=;i<num;i++){
for(int j=i;j<num;j++){
memset(vis,,sizeof(vis));
if(i==j){
int id=lower_bound(jilu,jilu+n,aft[i])-jilu;
if(id+<n&&jilu[id]==jilu[id+]){
vis[id]=vis[id+]=;
dfs(jilu[id],jilu[id]+jilu[id],);
}
}
else{
int id1,id2;
id1=lower_bound(jilu,jilu+n,aft[i])-jilu;
id2=lower_bound(jilu,jilu+n,aft[j])-jilu;
vis[id1]=vis[id2]=;
dfs(jilu[id1],jilu[id2]+jilu[id1],);
memset(vis,,sizeof(vis));
vis[id1]=vis[id2]=;
dfs(jilu[id2],jilu[id2]+jilu[id1],);
}
}
}
printf("%d\n",ans);
}

Codeforces 633D的更多相关文章

  1. Codeforces 633D Fibonacci-ish 暴力

    题意:1000个元素,每个元素的大小-1e9<=a[i]<=1e9,然后让你重新安排这些元素的位置 获得最长的前缀斐波那契数列 分析:枚举第一个元素和第二个元素,因为在题目元素的范围内,最 ...

  2. codeforces 633D - Fibonacci-ish 离散化 + 二分查询

    Fibonacci-ish Yash has recently learnt about the Fibonacci sequence and is very excited about it. He ...

  3. codeforces 633D D. Fibonacci-ish(dfs+暴力+map)

    D. Fibonacci-ish time limit per test 3 seconds memory limit per test 512 megabytes input standard in ...

  4. CodeForces - 633D Fibonacci-ish 大数标记map+pair的使用

    Fibonacci-ish Yash has recently learnt about the Fibonacci sequence and is very excited about it. He ...

  5. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  6. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  7. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  8. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  9. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

随机推荐

  1. ajax重构XMLHttpRequest

    //重构XMLHttpRequestvar net = new Object(); //名字空間對象 net.READY_STATE_UNINITIALIZED = 0; net.READY_STAT ...

  2. JQuery Pagenation 知识点整理——(function($){...})应用(20150517)

    首先:(function($){...})为Jquery提供的匿名函数: 代码实例(一) <script type="text/javascript"> (functi ...

  3. Oracle 11g R2 常用配置与日志的文件位置

    假设.bash_profile中oracle相关环境变量如下: $ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 $ORACLE_BASE=/u01/a ...

  4. c#.net 调用BouncyCastle生成PEM格式的私钥和公钥

    RsaKeyPairGenerator r = new RsaKeyPairGenerator(); r.Init()); AsymmetricCipherKeyPair keys = r.Gener ...

  5. Maven修改镜像仓库地址

    修改maven根目录下的conf文件夹中的setting.xml文件,如果你修改了默认仓库的存储位置,即.m2文件夹下没有本地仓库,但是有个setting.xml文件,那就修改这个文件就可以. 具体内 ...

  6. POI按照源单元格设置目标单元格格式

    原文:http://jjw198874.blog.163.com/blog/static/1889845522011102401854234/ POI按照源单元格设置目标单元格格式 poi按照一个源单 ...

  7. Tomcat在eclipse中起动成功,主页却打不开

    症状: tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误.同时其他项目页面也不能访问. 关闭eclipse里面的tomc ...

  8. C语言中字符串常量到底存在哪了?

    常量存储总结局部变量.静态局部变量.全局变量.全局静态变量.字符串常量以及动态申请的内存区 1.局部变量存储在栈中2.全局变量.静态变量(全局和局部静态变量)存储在静态存储区3.new申请的内存是在堆 ...

  9. [摘]PE中安装Windows 7/8

    1. 用WinPE U盘启动盘进入电脑.2. 格式化C盘,C盘一定要是激活状态(活动状态).3. 把Win8的ISO文件提取到D:/win8下 4. 从提取的文件中拷备:bootmgr boot(整个 ...

  10. PLSQL_性能优化系列02_Oracle Join关联

    2014-09-25 Created By BaoXinjian