<更新提示>

<第一次更新>


<正文>

最长等差数列(51nod 1055)

Description

N个不同的正整数,找出由这些数组成的最长的等差数列。

例如:1 3 5 6 8 9 10 12 13 14

等差子数列包括(仅包括两项的不列举)

1 3 5

1 5 9 13

3 6 9 12

3 8 13

5 9 13

6 8 10 12 14

其中6 8 10 12 14最长,长度为5。

Input Format

第1行:N,N为正整数的数量(3 <= N <= 10000)。 第2 - N+1行:N个正整数。(2<= A[i] <= 10^9)

Output Format

最长等差数列的长度。

Sample Input

10
1
3
5
6
8
9
10
12
13
14

Sample Output

5

解析

对于一个序列的特定最优值求解,应该很容易想到是线性DP。第一步首先排序是很容易想到的。

第一个突破口在状态的设置,如果直接用n设置状态,发现会很难处理转移的问题。

\(f[i][j]\)代表以\(a_i\)为第一项,\(a_j\)为第二项所构成的等差数列的最长长度\((i<j)\)

考虑若\(a_k\)可以作为这个等差数列的第三项,且满足\((i<j<k)\),那么\(f[i][j]=f[j][k]+1\)。

由等差数列的性质可以得知,当\(a_k\)可以作为第三项时:\(a_j*2=a_i+a_k\)。

此时我们枚举\(j\),将\(i\),\(k\)设为指针利用性质的大小关系去扫描即可,可以做到时间复杂度\(O(n^2)\)。

当然,由于\((i<j<k)\),所以转移时需要倒序枚举。

\(Code:\)

#include<bits/stdc++.h>
using namespace std;
inline void read(int &k)
{
int w=0,x=0;char ch;
while(!isdigit(ch))w|=ch=='-',ch=getchar();
while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
k=(w?-x:x);return;
}
const int N=10000+80;
int n,a[N];
short int f[N][N]={},ans=2;
inline void input(void)
{
read(n);
for(int i=1;i<=n;i++)read(a[i]);
}
inline void init(void)
{
sort(a+1,a+n+1);
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
f[i][j]=2;
}
inline void dp(void)
{
for(int j=n-1;j>=2;j--)
{
int i=j-1,k=j+1;
while(i>=1&&k<=n)
{
if(a[j]*2==a[i]+a[k])
{
f[i][j]=f[j][k]+1;
ans=max(ans,f[i][j]);
k++,i--;
}
if(a[j]*2>a[i]+a[k])k++;
if(a[j]*2<a[i]+a[k])i--;
}
}
}
int main(void)
{
input();
init();
dp();
printf("%d\n",ans);
return 0;
}

考点:灵活的状态设置。


<后记>

『最长等差数列 线性DP』的更多相关文章

  1. 『最大M子段和 线性DP』

    最大M子段和(51nod 1052) Description N个整数组成的序列a[1],a[2],a[3],-,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M &g ...

  2. 『The Counting Problem 数位dp』

    The Counting Problem Description 求 [L,R]内每个数码出现的次数. Input Format 若干行,一行两个正整数 L 和 R. 最后一行 L=R=0,表示输入结 ...

  3. 『快乐链覆盖 树形dp』

    快乐链覆盖 Description 给定一棵 n 个点的树,你需要找至多 k 条互不相交的路径,使得它们的长度之和最大 定义两条路径是相交的:当且仅当存在至少一个点,使得这个点在两条路径中都出现 定义 ...

  4. 『保卫王国 树上倍增dp』

    保卫王国 Description Z 国有n座城市,n - 1条双向道路,每条双向道路连接两座城市,且任意两座城市 都能通过若干条道路相互到达. Z 国的国防部长小 Z 要在城市中驻扎军队.驻扎军队需 ...

  5. 『土地征用 Land Acquisition 斜率优化DP』

    斜率优化DP的综合运用,对斜率优化的新理解. 详细介绍见『玩具装箱TOY 斜率优化DP』 土地征用 Land Acquisition(USACO08MAR) Description Farmer Jo ...

  6. 51 nod 1055 最长等差数列(dp)

    1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 N个不同的正整数,找出由这些数组成的最长的等差数列.     例如:1 3 5 6 8 9 ...

  7. 线性DP总结(LIS,LCS,LCIS,最长子段和)

    做了一段时间的线性dp的题目是时候做一个总结 线性动态规划无非就是在一个数组上搞嘛, 首先看一个最简单的问题: 一,最长字段和 下面为状态转移方程 for(int i=2;i<=n;i++) { ...

  8. 51nod-1055-最长等差数列(dp+优化)

    1055 最长等差数列  基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题  收藏  关注 N个不同的正整数,找出由这些数组成的最长的等差数列.     例如:1 3 ...

  9. 51Nod 1055 最长等差数列 (dp+哈希)

    1055 最长等差数列  基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题  收藏  关注 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 ...

随机推荐

  1. IMCASH:2019年区块链不会风平浪静,至少还有10件事值得期待

    当我们在说2019年是值得期待的一年时,我们还是得做到有根有据.那么,2019年在区块链行业都会发生哪些引导行业风向.影响整个行业的事件呢? 今天,白话区块链带着大家顺着时间线梳理一下. 01 第一季 ...

  2. 小程序即时聊天(仅页面功能,未接websocket)

    我们都知道小程序是不能直接操作dom的,所以做即时通讯聊天功能的时候也就不能像之前做的一样:点击发送的时候,拼接一个节点到页面上.话不多说,以下是效果和代码: -------------------- ...

  3. Linux之环境搭建(一)

    四大系统比较 Mac OS是苹果机专用系统,是基于Unix内核的图形化操作系统,因此Unix相当于父亲,Linux和Mac OS是对兄弟. CentOS是从Redhat源代码编译重新发布版.CentO ...

  4. iOS异常捕获和处理

    2013年4月份整理的代码,仅作记录:   //先宏定义 //发布和未发布状态的日志切换 #ifdef DEBUG     //异常栈开关     #define STACK_KEY YES     ...

  5. PBRT笔记(11)——光源

    自发光灯光 至今为止,人们发明了很多光源,现在被广泛使用的有: 白炽灯的钨丝很小.电流通过灯丝时,使得灯丝升温,从而使灯丝发出电磁波,其波长的分布取决于灯丝的温度.但大部分能量都被转化为热能而不是光能 ...

  6. kali渗透-基础篇

    渗透之meterpreter 模拟场景:小明是我室友,整天游戏人生,浑浑噩噩,前途迷茫,每次上课交作业都要看我的,于是我开启了apche服务器,给他下载作业(别问我为什么不用QQ传,因为要装逼!),他 ...

  7. 【自动化测试】搭建一个简单从Excel读取用例内容并输出结果的脚本

    # -*- coding:utf-8 -*- from selenium import webdriver import xlrd import xlwt from xlutils.copy impo ...

  8. java中的异常类

    Java中的异常: 1. Throwable是所有异常的根,java.lang.Throwable Throwable包含了错误(Error)和异常(Exception),Exception又包含了运 ...

  9. java方法的调用

    各种方法的调用实例 package cn.edu.fhj.day004; public class FunctionDemo { // 定义全局的变量 public int a = 3; public ...

  10. TimesTen数据库的备份和恢复

    建立不支持增量备份的全备份 做一个全备份,fileFull为不支持增量的全备份 $ ttbackup -type fileFull -dir /tmp/backupdir sampledb_1122( ...