Arithmetic Sequence(dp)
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.
#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)的更多相关文章
- hdu 5400 Arithmetic Sequence(模拟)
Problem Description A sequence b1,b2,⋯,bn are called (d1,d2)-arithmetic sequence ≤i≤n) such that ≤j& ...
- Codeforces Beta Round #13 C. Sequence (DP)
题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...
- cf13C Sequence(DP)
题意: N个数.a1...aN. 对于每个数而言,每一步只能加一或减一. 问最少总共需要多少步使得新序列是非递减序列. N (1 ≤ N ≤ 5000) 思路: *一个还不知道怎么证明的结论(待证): ...
- codeforces 486 E. LIS of Sequence(dp)
题目链接:http://codeforces.com/contest/486/problem/E 题意:给出n个数,如果一个数满足不属于最长递增序列,那么输出1,如果属于最长递增序列但是不属于所有最长 ...
- URAL 1183 Brackets Sequence(DP)
题目链接 题意 : 给你一串由括号组成的串,让你添加最少的括号使该串匹配. 思路 : 黑书上的DP.dp[i][j] = min{dp[i+1][j-1] (sh[i] == sh[j]),dp[i] ...
- 【ZJOI2017 Round1练习】D8T2 sequence(DP)
题意: 思路: #include <algorithm> #include <iostream> #include <cstring> #include <c ...
- Atcoder E - RGB Sequence(dp)
题目链接:http://arc074.contest.atcoder.jp/tasks/arc074_c 题意:一共有3种颜色,红色,绿色,蓝色.给出m个要求l,r,x表示在区间[l,r]内要有x种不 ...
- 【Codeforces】CF 5 C Longest Regular Bracket Sequence(dp)
题目 传送门:QWQ 分析 洛谷题解里有一位大佬讲的很好. 就是先用栈预处理出可以匹配的左右括号在数组中设为1 其他为0 最后求一下最长连续1的数量. 代码 #include <bits/std ...
- 【UVa】Wavio Sequence(dp)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
随机推荐
- UVA 10400 Game Show Math (dfs + 记忆化搜索)
Problem H Game Show Math Input: standard input Output: standard output Time Limit: 15 seconds A game ...
- ncsim仿真VHDL
ncsim仿真VHDL 1.文件列表 ctrl.vhd design_io.vhd tb.vhd compile.nc simulate.nc ./shm/shmtb.tcl 2. Compile你的 ...
- sql 读取excel中的数据
select 列名 as 字段名 from openBowSet('MSDASQL.1','driver=Microsoft Excel Driver(*.xls);dbq=文件存放地址','sele ...
- javascript 获取滚动条高度+常用js页面宽度与高度(转)
/******************** *获取窗口滚动条高度 ******************/ function getScrollTop() { var scrollTop=0; if(d ...
- xcode中折叠打开代码
- C#属性和readonly类型
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- IE兼容性标签和条件注释
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 深入javascript——构造函数和原型对象
常用的几种对象创建模式 使用new关键字创建 最基础的对象创建方式,无非就是和其他多数语言一样说的一样:没对象,你new一个呀! var gf = new Object(); gf.name = &q ...
- QML添加右键菜单
MouseArea { id: mouseRegion anchors.fill: parent; acceptedButtons: Qt.LeftButton | Qt.RightButton // ...
- C#设置鼠标在控件上面时,改变光标形状
//设置鼠标在控件上面时,改变光标形状 private void pictureBox_macroLogo_MouseHover(object sender, System.EventArgs e) ...