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. 【编程范式】汇编解释swap方法

    先要熟悉一些汇编的基本知识: 1.SP是什么? SP是堆栈寄存器,在调用子程序时,都会用到,保存原来程序的环境使用,如各个寄存器的内容,最重要的是,调用返回时程序的运行指令地址,这是由调用时将返回地址 ...

  2. 黑马程序员——Java高级应用(一)

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  3. document.write 向文档中写内容,包括文本、脚本、元素之类的,但是它在什么时候执行不会覆盖当前页面内容尼?

    当你打开一个页面,浏览器会 调用 document.open() 打开文档 document.write(...) 将下载到的网页内容写入文档 所有内容写完了,就调用 document.close() ...

  4. win8 安装myeclipse 失败 MyEclipse ForSpring 安装失败

    好像是main方法.jar无法载入之类的.. 可能是权限的问题哦.. 使用管理员权限试一下..

  5. .net 调用Oracle.Data.Access 组件提供的用于批量操作的方法

    1.添加引用 using Oracle.DataAccess.Client; using System.Configuration; 2.代码 增加方法 //DestinationTableName ...

  6. hdu 2438

    Problem Description Mr. West bought a new car! So he is travelling around the city. One day he comes ...

  7. 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  8. 04--帮助类ScreenAdapter编写

    使用VS类向导添加ScreenAdapter,在Num2048项目上右键选择"添加"->"类",然后将生成的两个文件拖放到Classes文件夹中      ...

  9. php array_combine 把array的默认键改成指定的字符串

    array(2) { [0] => array(6) { [0] => string(1) "1" [1] => string(10) "1470650 ...

  10. destoon实现商铺管理主页设置增加新菜单的方法

    1.打开/lang/zh-cn/home.inc.php,找到9,10行替换如下: $HMENU = $DMENU = array('公司介绍', '供应产品', '采购清单', '新闻中心', '荣 ...