Codeforces 633D
题意:
给定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的更多相关文章
- Codeforces 633D Fibonacci-ish 暴力
题意:1000个元素,每个元素的大小-1e9<=a[i]<=1e9,然后让你重新安排这些元素的位置 获得最长的前缀斐波那契数列 分析:枚举第一个元素和第二个元素,因为在题目元素的范围内,最 ...
- codeforces 633D - Fibonacci-ish 离散化 + 二分查询
Fibonacci-ish Yash has recently learnt about the Fibonacci sequence and is very excited about it. He ...
- 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 ...
- CodeForces - 633D Fibonacci-ish 大数标记map+pair的使用
Fibonacci-ish Yash has recently learnt about the Fibonacci sequence and is very excited about it. He ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
随机推荐
- 使自定义事件支持多绑定 js
<script language="JavaScript" type="text/javascript"> <!-- //定义类class1 ...
- mysql 修改字符集
查看mysql数据编码 登录MySQL服务,查看mysql数据库默认的编码 mysql> show variables like 'character%'; +----------------- ...
- eclipse svn subclipse下载地址
http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 Eclipse 3.x Subclipse release ...
- CA接口测试类
package com.creditharmony.adapter.testCase.ca; import org.junit.Test; import com.alibaba.druid.util. ...
- MySQL Binlog 【ROW】和【STATEMENT】选择(转)
前言: 二进制日记录了数据库执行更改的操作,如Insert,Update,Delete等.不包括Select等不影响数据库记录的操作,因为没有对数据进行修改.二进制主要的功能有:复制(Re ...
- CGI相关概念
common gateway interface 通用网关接口 可以让客户端从浏览器向执行在服务器上的程序请求数据.CGI描述了客户端和服务器程序之间传输数据的一种标准. 编程语言perl是一种被广泛 ...
- Python爬虫(图片)编写过程中遇到的问题
最近我突然对网络爬虫开窍了,真正做起来的时候发现并不算太难,都怪我以前有点懒,不过近两年编写了一些程序,手感积累了一些肯定也是因素,总之,还是惭愧了.好了,说正题,我把这两天做爬虫的过程中遇到的问题总 ...
- Debian 环境下安装Tomcat记录
1.安装JAVA运行环境 Debian默认带了OpenJDK,有人说不好用,我没有验证就从ORACLE官网上下载了最新的JDK安装包,直接解压并设置环境变量就行了: # tar zxvf jdk-8u ...
- VS使用技巧
1.VS帮助安装 VS2010为例==>注意,长时间未进行帮助安装,不过以下流程应该没有什么问题.如有问题,还请谅解... 2.VS即时窗口的应用 VS2010为例==>即时窗口的用法调试 ...
- Android SDK 4.0.3 开发环境配置及运行
最近又装了一次最新版本的ADK环境 目前最新版是Android SDK 4.0.3 本文的插图和文本虽然是Android2.2的 步骤都是一样的,如果安装的过程中遇到什么问题,可以留言,我会尽快回复! ...