题目链接: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 = 3000;
int a[maxn*maxn];
int cnt[maxn], dp[maxn][maxn];int main()
{#ifndef ONLINE_JUDGEfreopen("in1.txt", "r", stdin);#endif // ONLINE_JUDGEint cas, cur, n, m;while (scanf("%d", &cas) != EOF) {while (cas--) {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) {scanf("%d", a+i);}sort(a+1, a+1+n);cnt[cur=1] = 1;for (int i = 2; i <= n; i++) {if (a[i] == a[cur]) {cnt[cur]++;}else {a[++cur] = a[i];cnt[cur] = 1;}}memset(dp, 0, sizeof(dp));n = cur;for (int i = 1; i <= n; i++) {dp[i][i] = cnt[i];}int ans = 0;for (int i = 1; i <= n; i++) {int k = i;int tmp = dp[i][i];ans = max(tmp, ans);   // 没了这个会wa,疑问?for (int j = i+1; j <= n; j++) {for ( ; k >= 1 && a[i]-a[k] <= a[j]-a[i]; k--) {tmp = max(tmp, dp[k][i]+1);}dp[i][j]= tmp;ans = max(ans, tmp);}}printf("%d\n", ans);}}return 0;
}

转载于:https://www.cnblogs.com/windysai/p/4784225.html

Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告相关推荐

  1. BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4908 题目意思:给出 一个从1~N 的排列你和指定这个排列中的一个中位数m,从这个排列中找出长度为奇数 ...

  2. hdu 2058 解题报告 - The sum problem

    hdu 2058 解题报告 - The sum problem 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2058 等差求和公式: Sn=(a1+aN ...

  3. BestCoder16 1002.Revenge of LIS II(hdu 5087) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5087 题目意思:找出第二个最长递增子序列,输出长度.就是说,假如序列为 1 1 2,第二长递增子序列是 ...

  4. BestCoder4 1002 Miaomiao's Geometry (hdu 4932) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4932 题目意思:给出 n 个点你,需要找出最长的线段来覆盖所有的点.这个最长线段需要满足两个条件:(1 ...

  5. BestCoder15 1002.Instruction(hdu 5083) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5083 题目意思:如果给出 instruction 就需要输出对应的 16-bit binary cod ...

  6. HDU 1506 解题报告 Largest Rectangle in a Histogram (单调栈)

    看题传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1506 题意比较明显,就是找以某一个矩形为高的最大的矩形.这个题可以用单调栈来求解,需要注意的是如果从 ...

  7. Fibonacci Tree HDU - 4786——解题报告

    立志用更少的代码做更高效的表达 Coach Pang is interested in Fibonacci numbers while Uncle Yang wants him to do some ...

  8. 1003. Universal Travel Sites (35)解题报告

    思路 这道题实际上是在问图算法中的最大流问题,使用Edmonds-Karp算法就可以解决. 它的时间复杂度是O(VE^2).具体的算法和证明请参考<算法导论>第六部分图算法第26章最大流. ...

  9. hdu 1754 解题报告 I Hate It

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  10. HDU 1870解题报告(愚人节的礼物)

    愚人节的礼物 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %I64d , %I64u Java class ...

最新文章

  1. 基于OpenCV的特定区域提取
  2. 深圳华强电子交易网络有限公司3.15大会再获大奖
  3. C#网络编程(基本概念和操作) - Part.1
  4. 他爬取了B站所有番剧信息,发现了这些……
  5. 03.elasticsearch pipeline aggregation查询
  6. C# webkit内核 网页填表
  7. 高效的企业测试–测试框架(5/6)
  8. Eigen(2) 模块与头文件
  9. makefile 的export问题
  10. C#使用Sockets操作FTP【转载】
  11. jvm相关參数,调优
  12. Java Error(四)
  13. vtiger6.0升级汇总
  14. “狮”口逃生!长颈鹿勇斗狮群 4小时后脱身
  15. 深入浅出了解OCR识别票据原理
  16. selector wakeup
  17. DLang、Rust 以及 Golang 对比数据库操作方式
  18. LaTeX中的参考文献——作者年代引用
  19. 企业合并_OA替换 | K2 BPM 为你解决企业“变革”大烦恼
  20. selenium——爬取qq空间说说

热门文章

  1. celeste第二章_『第二章』 蔚蓝的剑
  2. word双栏添加右栏下脚注而左栏满字方法
  3. 会议安排问题(贪心算法)
  4. C语言中不同类型之间的混合运算
  5. 2年了,我逃离北上广,后悔了么?
  6. spring html导出excel文件,Spring 导出 Excel-Fun言
  7. windows 豆沙绿参数
  8. 循环经济升级推动产业升级发展建议
  9. 2022年10月29日(星期六)骑行海囗林场森林公园
  10. 16讲项目实战详细页制作及与首页和内页的链接添加