BestCoder16 1002.Revenge of LIS II(hdu 5087) 解题报告
题目链接: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) 解题报告相关推荐
- HDOJ 5087 Revenge of LIS II DP
HDOJ 5087 Revenge of LIS II DP DP的时候记录下能否够从两个位置转移过来. ... Revenge of LIS II Time Limit: 2000/1000 MS ...
- hdu 2058 解题报告 - The sum problem
hdu 2058 解题报告 - The sum problem 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2058 等差求和公式: Sn=(a1+aN ...
- BestCoder4 1002 Miaomiao's Geometry (hdu 4932) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4932 题目意思:给出 n 个点你,需要找出最长的线段来覆盖所有的点.这个最长线段需要满足两个条件:(1 ...
- BestCoder15 1002.Instruction(hdu 5083) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5083 题目意思:如果给出 instruction 就需要输出对应的 16-bit binary cod ...
- BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4908 题目意思:给出 一个从1~N 的排列你和指定这个排列中的一个中位数m,从这个排列中找出长度为奇数 ...
- 【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 ...
- HDU 1506 解题报告 Largest Rectangle in a Histogram (单调栈)
看题传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1506 题意比较明显,就是找以某一个矩形为高的最大的矩形.这个题可以用单调栈来求解,需要注意的是如果从 ...
- Fibonacci Tree HDU - 4786——解题报告
立志用更少的代码做更高效的表达 Coach Pang is interested in Fibonacci numbers while Uncle Yang wants him to do some ...
- hdu 1754 解题报告 I Hate It
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
最新文章
- WC2018集训 吉老师的军训练
- ACM入门之【并查集】
- c语言中穷竭算法,hihocoder#1054 : 滑动解锁(深度优先搜索)
- OpenCV—中值滤波
- 《视图更新与关系数据库理论》——2.1 关系和关系变量
- ITIL小故事-谁动了他的红包
- Java获取泛型类的实际类型的实例
- Spark常用API(五)
- Qt之QSS(白色靓丽)
- jquery 添加扩展方法及为选择的对象添加方法
- Ajax Js倒计时执行后台方法
- ASP常用服务器获取各类信息汇总
- 动态规划算法典型应用之背包问题
- mysql操作基础知识
- 五边形创意画_儿童美术创意绘画图片_儿童美术创意绘画作品
- typora偏好设置
- 微信 小程序 python 渲染_你用python写过那些好玩的微信小程序?
- 多模块,Maven无法下载依赖,仓库查看有这个版本但是无法下载,点reload也没用
- 当限量潮牌遇到 DeFi, 币圈项目社群当投机时尚结合加密基元
- 三极管的检测及其管脚的判别
热门文章
- 游戏中的整容术! 《Honey Select》捏人系统剖析
- ERROR OGG-01163 Bad column length (30) specified for column name in table TEST.demo_src, maximum all
- 设置Linux虚拟机和主机在同一网段
- leetcode102
- linux uname 命令 打印系统信息
- SpringSecurityOAuth使用JWT Token实现SSO单点登录
- Java_cpu飙升排查
- python---django中权限框架设计
- 使用Nodejs实现的小说爬虫
- cocos2d_android 瞬间动作