题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5087

题目意思:找出第二个最长递增子序列,输出长度。就是说,假如序列为 1 1 2,第二长递增子序列是1 2(下标为2 3),而第一长递增子序列也是(下标为 1 3)。

我一开始天真的以为,还是利用求最长递增子序列的算法啦,第二长不就是对dp 数组sort完后(从小到大)的dp[cnt-1] 啦,接着就呵呵啦~~~~= =

题解说,要加多一个 dp 数组,以便对当前下标值为 i 的数 a[i] 为结尾求出第二条dp序列,如果长度一样就直接那个长度了,否则是长度减 1。一直对每个数这样处理,处理到序列最后一个数就是答案了。

以下是看别人的。设 dp[i][0] 表示以a[i]这个数为结尾的最长递增子序列的长度,dp[i][1] 表示以a[i]这个数为结尾的第二长递增子序列的长度(可能为dp[i][0],也可能是dp[i][0]-1)

然后把每个数的两个dp值放进ans数组中,sort之后,答案就为ans[cnt-2]。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <algorithm>
 6 using namespace std;
 7
 8 const int N = 1000 + 10;
 9
10 int a[N], ans[2*N];
11 int dp[N][2];
12
13 int main()
14 {
15     int T, n;
16     #ifndef ONLINE_JUDGE
17         freopen("input.txt", "r", stdin);
18     #endif
19     while (scanf("%d", &T) != EOF)
20     {
21         while (T--)
22         {
23             scanf("%d", &n);
24             for (int i = 1; i <= n; i++)
25                 scanf("%d", &a[i]);
26             memset(dp, 0, sizeof(dp));
27             int cnt = 0;
28             for (int i = 1; i <= n; i++)
29             {
30                 dp[i][0] = 1;
31                 for (int j = 1; j < i; j++)
32                 {
33                     if (a[j] < a[i])
34                     {
35                         int x = dp[j][0] + 1;
36                         int y = dp[j][1] + 1;
37
38                         if (x > dp[i][0])
39                             swap(x, dp[i][0]);
40                         dp[i][1] = max(x, dp[i][1]);
41                         dp[i][1] = max(y, dp[i][1]);
42                     }
43                 }
44                 ans[cnt++] = dp[i][0];
45                 ans[cnt++] = dp[i][1];
46             }
47             sort(ans, ans+cnt);
48             printf("%d\n", ans[cnt-2]);
49         }
50     }
51     return 0;
52 }

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

BestCoder16 1002.Revenge of LIS II(hdu 5087) 解题报告相关推荐

  1. HDOJ 5087 Revenge of LIS II DP

    HDOJ 5087 Revenge of LIS II DP DP的时候记录下能否够从两个位置转移过来. ... Revenge of LIS II Time Limit: 2000/1000 MS ...

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

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

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

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

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

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

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

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

  6. 【LeetCode】 Best Time to Buy and Sell Stock I II III IV 解题报告

    原文地址:http://liangjiabin.com/blog/2015/04/leetcode-best-time-to-buy-and-sell-stock.html Best Time to ...

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

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

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

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

  9. hdu 1754 解题报告 I Hate It

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

最新文章

  1. WC2018集训 吉老师的军训练
  2. ACM入门之【并查集】
  3. c语言中穷竭算法,hihocoder#1054 : 滑动解锁(深度优先搜索)
  4. OpenCV—中值滤波
  5. 《视图更新与关系数据库理论》——2.1 关系和关系变量
  6. ITIL小故事-谁动了他的红包
  7. Java获取泛型类的实际类型的实例
  8. Spark常用API(五)
  9. Qt之QSS(白色靓丽)
  10. jquery 添加扩展方法及为选择的对象添加方法
  11. Ajax Js倒计时执行后台方法
  12. ASP常用服务器获取各类信息汇总
  13. 动态规划算法典型应用之背包问题
  14. mysql操作基础知识
  15. 五边形创意画_儿童美术创意绘画图片_儿童美术创意绘画作品
  16. typora偏好设置
  17. 微信 小程序 python 渲染_你用python写过那些好玩的微信小程序?
  18. 多模块,Maven无法下载依赖,仓库查看有这个版本但是无法下载,点reload也没用
  19. 当限量潮牌遇到 DeFi, 币圈项目社群当投机时尚结合加密基元
  20. 三极管的检测及其管脚的判别

热门文章

  1. 游戏中的整容术! 《Honey Select》捏人系统剖析
  2. ERROR OGG-01163 Bad column length (30) specified for column name in table TEST.demo_src, maximum all
  3. 设置Linux虚拟机和主机在同一网段
  4. leetcode102
  5. linux uname 命令 打印系统信息
  6. SpringSecurityOAuth使用JWT Token实现SSO单点登录
  7. Java_cpu飙升排查
  8. python---django中权限框架设计
  9. 使用Nodejs实现的小说爬虫
  10. cocos2d_android 瞬间动作