Arithmetic Sequence

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 51  Solved: 19
[Submit][Status][Web Board]

Description

Giving a number sequence A with length n, you should choosingm numbers from A(ignore the order) which can form an arithmetic sequence and make m as large as possible.

Input

There are multiple test cases. In each test case, the first line contains a positive integer n. The second line contains nintegers separated by spaces, indicating the number sequenceA. All the integers are positive and not more than 2000. The input will end by EOF.

Output

For each test case, output the maximum  as the answer in one line.

Sample Input

5
1 3 5 7 10
8
4 2 7 11 3 1 9 5

Sample Output

4
6

HINT

In the first test case, you should choose 1,3,5,7 to form the arithmetic sequence and its length is 4.

In the second test case, you should choose 1,3,5,7,9,11 and the length is 6.

题解:等差数列最长长度;开个二维dp,记录下就好了;一维dp也能过。。。
java超时;c过;
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[][];
int a[];
int main(){
int N;
while(~scanf("%d", &N)){
for(int i = ; i < N; i++){
scanf("%d", a + i);
}
sort(a, a + N);
int ans = ;
for(int i = ; i < N; i++){
for(int k = ; k <= ; k++){
dp[i][k] = ;
}
}
for(int i = ; i < N; i++){
for(int j = ; j < i; j++){
int d = a[i] - a[j];
dp[i][d] = dp[j][d] + ;
ans = max(ans, dp[i][d] + );
}
}
printf("%d\n", ans);
}
return ;
}

java:

import java.util.Arrays;
import java.util.Scanner; public class ArithmeticSequence{
static int[][] dp = new int[][];
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
int N;
while(cin.hasNext()){
N = cin.nextInt();
int[] a = new int[N];
for(int i = ; i < a.length; i++){
a[i] = cin.nextInt();
}
Arrays.sort(a);
int ans = ;
for(int i = ; i < N; i++){
for(int k = ; k <= ; k++){
dp[i][k] = ;
}
}
for(int i = ; i < a.length; i++){
for(int j = ; j < i; j++){
int d = a[i] - a[j];
dp[i][d] = dp[j][d] + ;
ans = Math.max(ans, dp[i][d] + );
}
}
System.out.println(ans);
}
}
}

dp;

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[];
int a[];
int main(){
int N;
while(~scanf("%d", &N)){
for(int i = ; i < N; i++){
scanf("%d", a + i);
}
sort(a, a + N);
int ans = ;
for(int i = ; i <= ; i++){
for(int k = ; k <= ; k++){
dp[k] = ;
}
for(int j = ; j < N; j++){
if(a[j] >= i)dp[a[j]] = max(dp[a[j] - i] + , dp[a[j]]);
else dp[a[j]] = ;
ans = max(ans, dp[a[j]]);
}
}
printf("%d\n", ans);
}
return ;
}

Arithmetic Sequence(dp)的更多相关文章

  1. hdu 5400 Arithmetic Sequence(模拟)

    Problem Description A sequence b1,b2,⋯,bn are called (d1,d2)-arithmetic sequence ≤i≤n) such that ≤j& ...

  2. Codeforces Beta Round #13 C. Sequence (DP)

    题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...

  3. cf13C Sequence(DP)

    题意: N个数.a1...aN. 对于每个数而言,每一步只能加一或减一. 问最少总共需要多少步使得新序列是非递减序列. N (1 ≤ N ≤ 5000) 思路: *一个还不知道怎么证明的结论(待证): ...

  4. codeforces 486 E. LIS of Sequence(dp)

    题目链接:http://codeforces.com/contest/486/problem/E 题意:给出n个数,如果一个数满足不属于最长递增序列,那么输出1,如果属于最长递增序列但是不属于所有最长 ...

  5. URAL 1183 Brackets Sequence(DP)

    题目链接 题意 : 给你一串由括号组成的串,让你添加最少的括号使该串匹配. 思路 : 黑书上的DP.dp[i][j] = min{dp[i+1][j-1] (sh[i] == sh[j]),dp[i] ...

  6. 【ZJOI2017 Round1练习】D8T2 sequence(DP)

    题意: 思路: #include <algorithm> #include <iostream> #include <cstring> #include <c ...

  7. Atcoder E - RGB Sequence(dp)

    题目链接:http://arc074.contest.atcoder.jp/tasks/arc074_c 题意:一共有3种颜色,红色,绿色,蓝色.给出m个要求l,r,x表示在区间[l,r]内要有x种不 ...

  8. 【Codeforces】CF 5 C Longest Regular Bracket Sequence(dp)

    题目 传送门:QWQ 分析 洛谷题解里有一位大佬讲的很好. 就是先用栈预处理出可以匹配的左右括号在数组中设为1 其他为0 最后求一下最长连续1的数量. 代码 #include <bits/std ...

  9. 【UVa】Wavio Sequence(dp)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

随机推荐

  1. jQuery插件开发 格式与解析

    jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...

  2. [RxJS] Sharing Streams with Share

    A stream will run with each new subscription added to it. This lesson shows the benefits of using sh ...

  3. 获取sqlserver数据库中所有库、表、字段名的方法

    获取sqlserver数据库中所有库.表.字段名的方法 2009年03月12日 星期四 下午 12:51 1.获取所有数据库名: SELECT Name FROM Master..SysDatabas ...

  4. IE6,IE7下滚动条没有生效解决方法

    需要加个相对定位 position:relative;

  5. Android之Activity启动的源码简介

    从一个简单的startActivity开始 进入了Activity.java public void startActivity(Intent intent) { this.startActivity ...

  6. cocos2dx-触摸事件

    //创建一个精灵 Sprite *spriteTest = Sprite::create("1.png"); spriteTest->setPosition(Point(,) ...

  7. poj 2479 dp求分段最大和

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 38079   Accepted: 11904 Des ...

  8. C++中的int和short int

    #include <iostream> #include <string> #include <cstring> //strcpy #include <cst ...

  9. python字符串的encode和decode

    原文 decode的作用是将其他编码的字符串转换成unicode编码. str1.decode('gb2312') #表示将gb2312编码的字符串转换成unicode编码 encode的作用是将un ...

  10. 浅析 JavaScript 组件编写

    之前因项目需要也编写过一些简单的JS组件,大多是基于JQuery库的,一直也没有过总结,导致再次写到的时候还去Google, 近日看到一个文章总结的挺好,拿过整理一下做个备忘. 此次同样是基于jque ...