hdu 5087 Revenge of LIS II ( LIS ,第二长子序列)
题意:求第二大的最长升序子序列
分析:这里的第二大指的是,全部的递增子序列的长度(包含相等的),
从大到小排序后。排在第二的长度
cid=546" style="color:rgb(106,57,6); text-decoration:none">BestCoder Round #16
上的第二题,注意
1 1 2 这组数据,答案应为2
思路1.每次将最长的两个上升子序列长度记录。最后再排序,取第二大的就可以
思路2.假设最长的上升子序列长度(ans)唯一,那第二大应为ans-1
否则,第二大的就为 ans
- #include<stdio.h>
- #include<algorithm>
- using namespace std;
- int a[1010],dp[1010][2],ans[2010],n;
- int main()
- {
- int T,i,j,k,x,y;
- scanf("%d",&T);
- while(T--){
- scanf("%d",&n);
- for(i=0;i<n;i++)
- scanf("%d",&a[i]);
- k=0;
- for(i=0;i<n;i++){
- dp[i][0]=1;
- dp[i][1]=0;
- for(j=0;j<i;j++){
- if(a[j]<a[i]){
- x=dp[j][0]+1;
- y=dp[j][1]+1;
- if(x>dp[i][0]) //更新最大的两个长度
- swap(x,dp[i][0]);
- if(x>y)
- swap(x,y);
- if(y>dp[i][1])
- dp[i][1]=y;
- }
- }
- ans[k++]=dp[i][0]; //将每次最大的两个值记录下来
- ans[k++]=dp[i][1];
- }
- sort(ans,ans+k);
- printf("%d\n",ans[k-2]); //输出排序后第二大的
- }
- return 0;
- }
- #include<stdio.h>
- #include<string.h>
- #define max(a,b) a>b?
a:b
- int a[1010],dp[1010],num[1010],n;
- int main()
- {
- int T,i,j,cnt,ans;
- scanf("%d",&T);
- while(T--){
- scanf("%d",&n);
- for(i=0;i<n;i++)
- scanf("%d",&a[i]);
- ans=1;
- for(i=0;i<n;i++){
- num[i]=dp[i]=1;
- for(j=0;j<i;j++){
- if(a[j]<a[i]&&dp[j]+1>dp[i]){
- dp[i]=dp[j]+1;
- num[i]=num[j]; //记录出现的次数
- }
- else if(a[j]<a[i]&&dp[j]+1==dp[i])
- num[i]+=num[j]; //记录出现的次数
- }
- ans=max(ans,dp[i]); //记录最大值
- }
- cnt=0;
- for(i=0;i<n;i++)
- if(dp[i]==ans)
- cnt+=num[i]; //计算最大值出现的总次数
- if(cnt==1) //这里改成cnt>1输出ans,否则ans-1,wrong了,非常郁闷
- printf("%d\n",ans-1);
- else
- printf("%d\n",ans);
- }
- return 0;
- }
hdu 5087 Revenge of LIS II ( LIS ,第二长子序列)的更多相关文章
- hdoj 5087 Revenge of LIS II 【第二长单调递增子】
称号:hdoj 5087 Revenge of LIS II 题意:非常easy,给你一个序列,让你求第二长单调递增子序列. 分析:事实上非常easy.不知道比赛的时候为什么那么多了判掉了. 我们用O ...
- hdu 5087 Revenge of LIS II
http://acm.hdu.edu.cn/showproblem.php?pid=5087 题意求第二长的上升序列. 在求最长上升序列的同时加上一个数组,来记录以i为结尾的有多少条序列.如果n+1为 ...
- hdu 5087 Revenge of LIS II (DP)
题意: N个数,求第二长上升子序列的长度. 数据范围: 1. 1 <= T <= 1002. 2 <= N <= 10003. 1 <= Ai <= 1 000 0 ...
- HDU 5087 (线性DP+次大LIS)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5087 题目大意:求次大LIS的长度.注意两个长度相同的LIS大小比较,下标和大的LIS较大. 解题思 ...
- HDU5087 Revenge of LIS II (LIS变形)
题目链接:pid=5087">http://acm.hdu.edu.cn/showproblem.php?pid=5087 题意: 求第二长的最长递增序列的长度 分析: 用step[i ...
- hdu5087 Revenge of LIS II (dp)
只要理解了LIS,这道题稍微搞一下就行了. 求LIS(最长上升子序列)有两种方法: 1.O(n^2)的算法:设dp[i]为以a[i]结尾的最长上升子序列的长度.dp[i]最少也得是1,就初始化为1,则 ...
- BestCoder16 1002.Revenge of LIS II(hdu 5087) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5087 题目意思:找出第二个最长递增子序列,输出长度.就是说,假如序列为 1 1 2,第二长递增子序列是 ...
- HDOJ 5087 Revenge of LIS II DP
DP的时候记录下能否够从两个位置转移过来. ... Revenge of LIS II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- HDU5087——Revenge of LIS II(BestCoder Round #16)
Revenge of LIS II Problem DescriptionIn computer science, the longest increasing subsequence problem ...
随机推荐
- Microsoft Windows Server 系统基本配置
Microsoft Windows Server 系统基本配置 环境基本配置 桌面和显示属性 更新服务器名称 更新用户密码 创建密码重置盘 设置网络类型 TCP/IP设置 ping和ipconfig命 ...
- saltstack入门个人笔记
offical website reference1 reference2 install apt-get install python-software-properties apt install ...
- PyTorch的十七个损失函数
本文截取自<PyTorch 模型训练实用教程>,获取全文pdf请点击: tensor-yu/PyTorch_Tutorialgithub.com 版权声明:本文为博主原创文章,转载请附上 ...
- docker 阿里云镜像加速器
传送门:阿里云镜像地址 Ubuntu/CentOS 安装/升级你的Docker客户端 推荐安装1..0以上版本的Docker客户端,参考文档 docker-ce 如何配置镜像加速器 针对Docker客 ...
- logging日志模块配置
logging日志模块 日志级别 日志一共分成5个等级,从低到高分别是: 1)DEBUG 2)INFO 3)WARNING 4)ERROR 5)CRITICAL 说明: DEBUG:详细的信息,通常只 ...
- pwnable.kr lotto之write up
源代码 : #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcnt ...
- POJ 1985 Cow Marathon (求树的直径)
Description After hearing about the epidemic of obesity in the USA, Farmer John wants his cows to ge ...
- 【BZOJ 1076】[SCOI2008]奖励关(期望)
Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...
- [NOI2001] 炮兵阵地 (状压Dp经典例题)
如果您的电脑比较优秀能在 1sec 内跑过 2^1000 的时间复杂度,不妨你可以尝试一下,其实实际时间复杂度远远少于 2^1000,作为骗分不错的选择QAQ,然后我们来分析一下正解: 很显然此题是一 ...
- 零、常用的Mysql数据库操作语句大全
零.用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PAS ...