ZOJ 2527题解
题目链接
题目的大概意思是给出一个序列,这个序列的数字都是整数,范围是-1,000,000,000 到1,000,000,000,数字的数量在2到1000,要求求出这个序列最长的等差子序列的长度。
我的想法,最长的相等的子序列作为maxlen的初始值,因为这个就是一个等差的子序列,然后把相同数字合并变为一个,这样可以减小数据量。
然后用排序一下,再用O(N*N*N)的复杂度求解,当然,这个可以做一些优化,当求最长等差子序列的时候,方法是先选定两个数字,得到这两个数字的差, 然后不断的求下一个数,通过map找这个数字,找到一个len加1,如果没找到直接跳出。
在这个地方我想应该还可以做一个优化,如果这两个数字已经被前面的等差序列找过的话就不用找了,比如2,3,4,5,当找2,3的时候,同时找过4,5 了,当找4,5的时候发现前面已经同时找过就不用再找下去了;另外,如果较大的一个数字后面的数字的个数已经小于maxlen了,就不用找了,但是这个优 化的效果不是很明显,于是就不做了。
我的代码速度比较慢,没有dp,其实就是死做的,0.46s通过,看看最快的是0.02s,还有很大的差距啊,附上代码:in C++
![](/assets/blank.gif)
![](/assets/blank.gif)
2 #include<cstdio>
3 #include<map>
4 #include<vector>
5 #include<cstdlib>
6 using namespace std;
7
8 int cmp(const void *a, const void *b)
9 {
10 int *t1, *t2;
11 t1 = (int *)a;
12 t2 = (int *)b;
13 return (*t1) - (*t2) ;
14 }
15 int main()
16 {
17 map<int ,int> m;
18 int num[1000];
19 int n;
20
21 while(scanf("%d",&n) != EOF)
22 {
23 int t = 0;
24 int maxlen = 0 ;
25 for(int i = 0 ; i < n ; i ++)
26 {
27 int temp;
28 scanf("%d",&temp);
29 if(!m[temp])
30 num[t++] = temp;
31 m[temp] ++ ;
32 if(maxlen < m[temp])
33 maxlen = m[temp] ;
34 }
35 qsort(num,t,sizeof(int),cmp);
36 for(int i = 0 ; i < t ; i ++)
37 for(int j = i + 1 ; j < t ; j ++)
38 {
39 int cur = num[j];
40 int len = 1 ;
41 int co = num[j] - num[i];
42 while(m[cur])
43 {
44 len ++ ;
45 cur += co ;
46 }
47 if(len > maxlen)
48 maxlen = len ;
49 }
50 printf("%d\n",maxlen);
51
52 }
53
54 return 0;
55 }
转载于:https://www.cnblogs.com/vivyli/archive/2010/02/05/1664063.html
ZOJ 2527题解相关推荐
- ZOJ 1410 题解
题目链接:http://acm.zju.edu.cn/show_problem.php?pid=1410 又是一道简单题,以前做过一次,结果放弃了,今天看了一下,觉得还是比较简单于是下手了. 题目的大 ...
- 2019山东省赛B - Flipping Game ZOJ - 4114 题解
题意: 初始有n个灯泡,灯泡状态是0和1,.现在有k轮操作,每次改变且仅改变m个的灯的状态,给定n盏灯的初始状态的最终状态,求有多少种解决改变灯的方案满足可以满足题目条件. 思路: 开始写的时候以为是 ...
- CONTINUE...? ZOJ - 4033
CONTINUE...? ZOJ - 4033 题解:先计算一下总数sum是否是偶数,如果不是则不能分出来,如果是则从后面开始分,先把人分到1.3组,分完sum / 2这些人,如果恰好能够分成零,那么 ...
- ZOJ Monthly,Feburary 2012 部分题解
题目链接:点击打开链接 ZOJ 3573 Under Attack 距离做这套题到写题解间隔比较久,题意有些忘了.. #include <iostream> #include <cs ...
- ZOJ Monthly, June 2014 月赛BCDEFGH题题解
比赛链接:点击打开链接 上来先搞了f.c,,然后发现状态不正确,一下午都是脑洞大开,, 无脑wa,无脑ce...一样的错犯2次.. 硬着头皮搞了几发,最后20分钟码了一下G,不知道为什么把1直接当成不 ...
- ZOJ 3962 Seven Segment Display(数位DP)题解
题意:给一个16进制8位数,给定每个数字的贡献,问你贡献和. 思路:数位DP,想了很久用什么表示状态,看题解说用和就行,其他的都算是比较正常的数位DP. 代码: #include<iostrea ...
- ZOJ 2747 Paint the Wall(离散化+暴力)题解
题意:给你一个面,然后涂颜色,问你最后剩多少颜色,每种颜色面积. 思路:第一反应是二维线段树,代码又臭又长,可以做.但是这题暴力+离散化就可以过.可以看到他给的n只有100,也就是说最坏情况下会涂10 ...
- ZOJ 3829 Known Notation(贪心)题解
题意:给一串字符,问你最少几步能变成后缀表达式.后缀表达式定义为,1 * 1 = 1 1 *,题目所给出的字串不带空格.你可以进行两种操作:加数字,交换任意两个字符. 思路:(不)显然,最终结果数字比 ...
- ZOJ 3609 Modular Inverse(扩展欧几里得)题解
题意:求乘法逆元最小正正数解 思路:a*x≡1(mod m),则称x 是 a 关于 m 的乘法逆元,可以通过解a*x + m*y = 1解得x.那么通过EXGcd得到特解x1,最小正解x1 = x1 ...
最新文章
- SQL Server备份的三个恢复模型
- 14.Python抠图脚本
- CSP认证201803-3	URL映射[C++题解]:字符串处理、模拟
- c 获取char*的长度_C/C++编程笔记:C语言字符串比较函数,超详细,值得收藏
- SAP Spartacus LockFocusDirective的单步调试
- AWS加入.NET Foundation企业赞助商计划
- [系统安全]使用OD编写连连看外挂
- JavaScript的求模、取整、小数的取舍
- OC之protocol监听器的实现
- linux怎么初始命令,linux 第二季 初始linux 目录以及初始命令
- java后端服务运行原理_web服务的后台工作原理
- JavaScript 将两个数组合并,且删除重复的值
- PMP认证的教材更新到第几版了?
- winform直接控制云台_大疆DJI RSC2相机云台评测:折叠设计带来更多玩法
- 计算机vb期末试题及答案,VB期末考试试题及答案
- asp.net使用MailMessage发送邮件的方法
- windows无法连接到某个wifi_Windows无法连接到网络解决方法
- 网页通过Flash播放视频
- 手把手教你做智能手环
- 如何恢复sd卡数据呢?