华中农业大学第四届程序设计大赛网络同步赛 J

Problem J: Arithmetic Sequence

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 1766  Solved: 299
[Submit][Status][Web Board]

Description

Giving a number sequence A with length n, you should choosing m 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 n integers separated by spaces, indicating the number sequence A. 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.

题意: 给你一个序列 输出 序列中最长等差数列的长度

题解:

1.暴力 sort排序一下 然后暴力枚举每一个步长 坑点(注意相同的数  也就是等差可以为0)

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<map>
 5 #include<queue>
 6 #include<stack>
 7 using namespace std;
 8 int n;
 9 int mp[2005];
10 int exm;
11 int ans;
12 int q;
13 int maxn;
14 int main()
15 {
16     while(scanf("%d",&n)!=EOF)
17     {
18         ans=-1;
19         maxn=-1;
20         for(int i=1;i<=2000;i++)
21          mp[i]=0;
22         for(int i=0;i<n;i++)
23         {
24           scanf("%d",&exm);
25           mp[exm]++;
26           if(ans<mp[exm])
27           ans=mp[exm];
28           if(maxn<exm)
29           maxn=exm;
30         }
31          for(int i=1;i<=maxn;i++)
32          {
33             if(mp[i])
34             {
35                for(int d=1;d<=maxn;d++)
36               {
37                 int gg=i+d;
38                 q=1;
39                  while(gg)
40                {
41                  if(gg>maxn)
42                    break;
43                  if(mp[gg])
44                    q++;
45                  else
46                    break;
47                   gg=gg+d;
48                }
49                  if(q>ans)
50                  ans=q;
51                  if(gg>maxn)
52                  break;
53               }
54             }
55          }
56          cout<<ans<<endl;
57     }
58     return 0;
59  }

2.dp处理 (yan代码) dp[i][j] 表示以i为结尾 j为等差的方法数目

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <cmath>
 6 #include<vector>
 7 #include<map>
 8 #pragma comment(linker, "/STACK:102400000,102400000")
 9 using namespace std;
10 const int N = 2000+20, M = 1e6+10, mod = 1e9+7,inf = 1e9;
11 typedef long long ll;
12
13 int n,a[N];
14 int dp[N][N];
15 int main() {
16     while(scanf("%d",&n)!=EOF) {
17         for(int i=1;i<=n;i++) scanf("%d",&a[i]);
18         sort(a+1,a+n+1);
19         for(int j=1;j<=n;j++)
20         for(int i=0;i<=2000;i++) dp[j][i] = 1;
21         for(int i=2;i<=n;i++) {
22             for(int j=1;j<i;j++) {
23                 dp[i][a[i]-a[j]] =  max(dp[j][a[i]-a[j]]+1,dp[i][a[i]-a[j]]);
24             }
25         }
26         int ans = 0;
27         for(int j=1;j<=n;j++)
28         for(int i=0;i<=2000;i++) {
29             ans = max(ans,dp[j][i]);
30          }
31         printf("%d\n",ans);
32     }
33     return 0;
34 }
时间: 2024-10-20 04:27:17

华中农业大学第四届程序设计大赛网络同步赛 J的相关文章

华中农业大学第四届程序设计大赛网络同步赛 I

Problem I: Catching Dogs Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1130  Solved: 292[Submit][Status][Web Board] Description Diao Yang keeps many dogs. But today his dogs all run away. Diao Yang has to catch them. To simplify the problem, we assu

[HZAU]华中农业大学第四届程序设计大赛网络同步赛

听说是邀请赛啊,大概做了做…中午出去吃了个饭回来过掉的I.然后去做作业了…… 1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <climits> 6 #include <complex> 7 #include <fstream> 8 #include <cassert&g

华中农业大学第四届程序设计大赛网络同步赛 G.Array C 线段树或者优先队列

Problem G: Array C Time Limit: 1 Sec  Memory Limit: 128 MB Description Giving two integers  and  and two arrays  and  both with length , you should construct an array  also with length  which satisfied: 1.0≤Ci≤Ai(1≤i≤n) 2. and make the value S be min

华中农业大学第五届程序设计大赛网络同步赛解题报告(转)

A.Little Red Riding Hood B.Choosy in Food •F[i]:从第I个点到终点的期望步数 •F[i] = (F[i + k] + k ) * P[k] •F[ed] = 0 •高斯消元求解 •注意存在从起点不能到达终点的情况 C.Friends •F[rt][len] :节点rt的子孙里,距离rt的为len的节点个数 •ans[rt][len] : 整棵树上,距离rt为len的节点个数 •F值一次简单的深搜可以得到 •而ans[rt][len] = F[rt][

华中农业大学第五届程序设计大赛网络同步赛题解

A.Little Red Riding Hood B.Choosy in Food •F[i]:从第I个点到终点的期望步数 •F[i] = (F[i + k] + k ) * P[k] •F[ed] = 0 •高斯消元求解 •注意存在从起点不能到达终点的情况 C.Friends •F[rt][len] :节点rt的子孙里,距离rt的为len的节点个数 •ans[rt][len] : 整棵树上,距离rt为len的节点个数 •F值一次简单的深搜可以得到 •而ans[rt][len] = F[rt][

陕西师范大学第七届程序设计竞赛网络同步赛 J 黑猫的小老弟【数论/法拉数列/欧拉函数】

链接:https://www.nowcoder.com/acm/contest/121/J来源:牛客网 题目描述 大家知道,黑猫有很多的迷弟迷妹,当然也有相亲相爱的基友,这其中就有一些二五仔是黑猫的小老弟.小老弟是如何产生的呢?聪明的iko告诉黑猫,其实是有规律的(她怎么知道???)! 一开始,有两个原始二五仔,代号0/1和1/1, 从原始二五仔到第n代小老弟,每代相邻两个小老弟a/b和c/d,产生一个新的小老弟(a+c)/(b+d),成为下一代新成员.将每一代的小老弟代号约分(包括0/1,1/

华中农业大学第五届程序设计大赛 (7/12)

今天实在累了,还有的题晚点补.... 题目链接:http://acm.hzau.edu.cn/problemset.php?page=3 题目:acm.hzau.edu.cn/5th.pdf A:Little Red Riding Hood 题意:给你n朵花,每朵花有个权值,然后每次取花最少要间隔k朵,求权值最大: 思路:简单dp: #pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream&

2017年西南民族大学程序设计竞赛-网络同步赛(代码)

20598954 nmphy D 答案正确 8 512 486 C++ 2017-12-30 14:30:35 20598712 nmphy E 答案正确 3 504 695 C++ 2017-12-30 14:25:59 20598181 nmphy E 答案正确 3 484 659 C++ 2017-12-30 14:15:16 20597638 nmphy E 答案正确 3 504 505 C++ 2017-12-30 14:05:08//比赛时候这里显示的是WA,而且显示准确率5% 20

2017年西南民族大学程序设计竞赛-网络同步赛

题目描述 现在有一个N*M的矩形星图.其中包括恒星和黑洞.恒星可以向上.下.左.右发射光束,且允许光束从其中穿过:黑洞会吸收所有经过的光束. 若一颗恒星向上.下.左.右发射光束,你能告诉我,该光束能否避免被黑洞吸收,进入星图之外的区域么? 输入描述: 单组输入.第一行三个正整数N,M,Q(1 <= N,M<= 1000,1 <= Q <= 1000000),分别表示矩阵的行列,以及询问的个数,询问之间相互独立.然后一个N*M的矩阵,由’*’和’#’构成,表示星图.’*’表示恒星,’