Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5064
题目意思:给出n个数:a1, a2, ..., an,然后需要从中找出一个最长的序列 b1, b2, ..., bt。需要满足两个条件(1)b1≤b2≤…≤bt (2)b2−b1≤b3−b2≤⋯≤bt−bt−1。求出最大的 t 为多少。
遗留大半年的题目呀呀呀呀~~~~!!!首先非常感谢乌冬子大半年前的指点迷津,呕心沥血想了大半天举出个反例,以便指出我算法的错误。为了纪念这个伟大的人物(hoho n_n),我就以他给出的数据作为例子吧。
一开始我真的觉得那个M是多余的,其实不然,由于M最大为 222 (4194304,计算机算出来的,千真万确!)。 那么每个数都是不同的最长数列是这样的:1, 2,3,...,n 。等差数列,即(1+n)*n / 2 = 4194304 , 算出来的 n 大概为3000,这个暗示我们开的数组大小为3000就足够了。
先看这组数据,不难发现,最优解是选择 10 11 12 13 100.
1
7 148
1 1 10 11 12 13 100
首先需要从小到大排序,把重复的数去掉,这个可以参考官方题解。
设dp[i][j]表示以第 j 个数为结尾,它前一个数为第 i 个且满足题目两个条件的最大选择个数。
可以写出这样的状态转移方程,
dp[i][j] = max(dp[i][j], dp[k][i]+1), k <= i < j && b[i]-b[k] <= b[j]-b[i]
dp[k][i] 表示在 i 之前,以第 k 个数结尾,能使得 b[i]-b[k] <= b[j]-b[i],即相对单纯地以第 i 个数结尾,b[i]-b[k] 的差比 b[j]-b[i] 还要小或者相等。然后就更新 dp[i][j] 的值了。
至于复杂度从O(x^3) 到 O(x^2) 可以参考其他题解,因为。。。俺还是不太完全理解 T_T
代码中还有个小地方希望有识之士提点提点,不胜感激~~~
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- const int maxn = ;
- int a[maxn*maxn];
- int cnt[maxn], dp[maxn][maxn];
- int main()
- {
- #ifndef ONLINE_JUDGE
- freopen("in1.txt", "r", stdin);
- #endif // ONLINE_JUDGE
- int cas, cur, n, m;
- while (scanf("%d", &cas) != EOF) {
- while (cas--) {
- scanf("%d%d", &n, &m);
- for (int i = ; i <= n; i++) {
- scanf("%d", a+i);
- }
- sort(a+, a++n);
- cnt[cur=] = ;
- for (int i = ; i <= n; i++) {
- if (a[i] == a[cur]) {
- cnt[cur]++;
- }
- else {
- a[++cur] = a[i];
- cnt[cur] = ;
- }
- }
- memset(dp, , sizeof(dp));
- n = cur;
- for (int i = ; i <= n; i++) {
- dp[i][i] = cnt[i];
- }
- int ans = ;
- for (int i = ; i <= n; i++) {
- int k = i;
- int tmp = dp[i][i];
- ans = max(tmp, ans); // 没了这个会wa,疑问?
- for (int j = i+; j <= n; j++) {
- for ( ; k >= && a[i]-a[k] <= a[j]-a[i]; k--) {
- tmp = max(tmp, dp[k][i]+);
- }
- dp[i][j]= tmp;
- ans = max(ans, tmp);
- }
- }
- printf("%d\n", ans);
- }
- }
- return ;
- }
Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告的更多相关文章
- BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4908 题目意思:给出 一个从1~N 的排列你和指定这个排列中的一个中位数m,从这个排列中找出长度为奇数 ...
- BestCoder11(Div2) 1003 Boring count (hdu 5056) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5056 题目意思:给出一条只有小写字母组成的序列S,问当中可以组成多少条每个字母出现的次数 <= ...
- 【九度OJ】题目1442:A sequence of numbers 解题报告
[九度OJ]题目1442:A sequence of numbers 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1442 ...
- BestCoder13 1001.Beautiful Palindrome Number(hdu 5062) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5062 题目意思:给出 N,找出 1 - 10^N 中满足 Beautiful Palindrome N ...
- BestCoder9 1003 Revenge of kNN(hdu 4995) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4995 题目意思:在一个一维坐标轴上,给出位置 xi 和值 vi,对于 M 次询问,每次询问给出inde ...
- BestCoder18 1002.Math Problem(hdu 5105) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5105 题目意思:给出一个6个实数:a, b, c, d, l, r.通过在[l, r]中取数 x,使得 ...
- BestCoder17 1002.Select(hdu 5101) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5101 题目意思:给出 n 个 classes 和 Dudu 的 IQ(为k),每个classes 都有 ...
- BestCoder10 1001 Revenge of Fibonacci(hdu 5018) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5018 题目意思:给出在 new Fibonacci 中最先的两个数 A 和 B(也就是f[1] = A ...
- BestCoder8 1001.Summary(hdu 4989) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4989 题目意思:给出 n 个数,然后将这些数两两相加,得到 n*(n-1) /2 对和,把重复的和去掉 ...
随机推荐
- C语言内存管理(转)
伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981 程序员们经常编写内存管理程序,往往提心吊胆.如果 ...
- 面试集锦-常量,const, const 对指针的影响
在C语言中不可改变的数据(量)就是常量 在C语言中有三种常量 字面量(直接量),就是直接写出来的,从写法上就可以看出值与类型等,例如:19,123.456等 名字常量 ...
- 2012Chengdu B (快速组合数)
B - Candy Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- 2013nanjignB
B - Poor Warehouse Keeper Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- .NET异步编程之回调
C#中异步和多线程的区别是什么呢?异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为异步和多线程是等同的概念.但是,异步和多线程还是有一些区别的.而这些区 ...
- CentOS 6.5 zabbix 3.0.4 乱码问题
中文支持 修改web端源文件来开启语言 [root@localhost /]# vim /var/www/html/zabbix/include/locales.inc.php 'zh_CN' =&g ...
- FineUI第十五天---表格概述
Grid表格概述 跟Asp.Net的差不多. 下面介绍一些属性: ExpandUnusedSpace:此列充满所有的剩余空间,并且随着表格宽度变化而变化 DataToolTipField:用来显示 ...
- delay() .split()
delay(500) 延时多少秒后执行,结合animate()使用 delay(500).animate({},时间) .split() stringObject.split(separator,ho ...
- buildroot 添加ssh,以及使用stftp 服务
上一篇水了一下关于buildroot的基本操作,这一章水一下开启SSH服务以及配置sftp服务,以及静态IP的设置. 配置: make menuconfig Target packages ---& ...
- echarts之字符云tooltip显示混乱问题的解决办法
echarts字符云中tooltip显示混乱主要表现为一下两点: 1.字体与其显示框内容不对应鼠标识别错误 解决思路: 就是option里的数据要对value降序排序(这一点很关键,是必须的一步) 把 ...