Codeforces 633D
2016-03-04 08:39
302 查看
题意:
给定n,和一个长度为n的序列。
让你在这n个数中找长度尽可能长的fib数列。
思路:
这题的数字是在1e9范围内的,所以最长的可能存在的fib数列官方的解释是90左右。有一种情况除外,就是0的个数比较多的情况下。
而决定fib数列的是开头的两个数字,以及顺序,介于n是1000的范围我们就可以暴力开头的两个数字啦。这题要注意0的情况,如果整个序列都是0的话,那么复杂度就是1e9了,所以本人先unique了一下,然后每次从unique完的数组里边取材,这样就避免了0的问题同时也某些程度上减少了复杂度。需要注意的是unique完了之后有可能本身和本身作为fib数列的前两个,因为原始序列中可能存在相同的。
坑点:
这题我一开始的思路是记忆话搜索,但是...不能保证记录的那个序列和原来的序列没有在数组中重复取材。记住fib的特性啊啊啊啊
编号和题目中的序列搞混了,WA了两发。
给定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[1050],aft[1050]; bool vis[1050]; int n; int ans=2; void dfs(int bf,int sum,int step){ int id=lower_bound(jilu,jilu+n,sum)-jilu; if(id>=n||(id==0&&jilu[0]!=sum)){ if(ans<step) ans=step; } else if(!vis[id]){ if(jilu[id]==sum){ vis[id]=1; dfs(sum,bf+sum,step+1); } 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]=1; dfs(sum,sum+bf,step+1); } } } int main() { scanf("%d",&n); for(int i=0;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=0;i<num;i++){ for(int j=i;j<num;j++){ memset(vis,0,sizeof(vis)); if(i==j){ int id=lower_bound(jilu,jilu+n,aft[i])-jilu; if(id+1<n&&jilu[id]==jilu[id+1]){ vis[id]=vis[id+1]=1; dfs(jilu[id],jilu[id]+jilu[id],2); } } 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]=1; dfs(jilu[id1],jilu[id2]+jilu[id1],2); memset(vis,0,sizeof(vis)); vis[id1]=vis[id2]=1; dfs(jilu[id2],jilu[id2]+jilu[id1],2); } } } printf("%d\n",ans); }
相关文章推荐
- 蓝桥杯六8移动距离
- 获取手机唯一标识符(UUID+KeyChain)
- 前端性能优化--延迟加载js、css、图片等组件
- 乱弹集锦:1岁到99岁,可能经历
- 第三方框架管理cocoapods的使用
- block的使用
- 160. Intersection of Two Linked Lists
- Linux下/dev/mem和/dev/kmem及操作gpio实例
- Edge浏览器的几个创意应用
- 宏定义
- tabBar
- Delphi历史版本介绍(二)从Delphi8到DelphiXE3
- statusBar
- android studio使用-查看类结构及继承关系
- Device Tree常用方法解析
- Java并发框架——AQS堵塞队列管理(一)——自旋锁
- Mysql 5.7.11 安装在 win10,服务启动失败解决方法
- [BZOJ3522] [Poi2014]Hotel
- Delphi历史版本介绍(一)从Delphi1到Delphi7
- 将磁盘的FAT32格式转换为NTFS