博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDURevenge of Segment Tree(第二长的递增子序列)
阅读量:6278 次
发布时间:2019-06-22

本文共 1186 字,大约阅读时间需要 3 分钟。

HDURevenge of Segment Tree(第二长的递增子序列)

题目大意:这题是求第二长的递增子序列。

解题思路:用n^2的算法来求LIS,可是这里还要记录一下最长的那个序列是否有多种组成方式,假设>= 2, 那么第二长的还是最长的LIS的长度,否则就是LIS - 1;

代码:

#include 
#include
#include
using namespace std;const int maxn = 1005;int l[maxn], c[maxn];int arr[maxn];int main () { int T, n; scanf ("%d", &T); while (T--) { scanf ("%d", &n); for (int i = 1; i <= n; i++) scanf ("%d", &arr[i]); for (int i = 1; i <= n; i++) l[i] = c[i] = 1; int ans = 1; for (int i = 2; i <= n; i++) { for (int j = 1; j < i; j++) { if (arr[i] > arr[j]) { if (l[j] + 1 > l[i]) { l[i] = l[j] + 1; c[i] = c[j]; } else if (l[j] + 1 == l[i]) c[i] = 2;//之前直接加上c[j],结果会int溢出。导致错误。 } } ans = max (ans, l[i]); } int cnt = 0; for (int i = 1; i <= n; i++) if (l[i] == ans) cnt += c[i]; if (cnt > 1) printf ("%d\n", ans); else printf ("%d\n", ans - 1); } return 0;}

转载地址:http://ptnva.baihongyu.com/

你可能感兴趣的文章
树莓派3链接wifi
查看>>
js面向对象编程
查看>>
Ruby中类 模块 单例方法 总结
查看>>
jQuery的validate插件
查看>>
5-4 8 管道符 作业控制 shell变量 环境变量配置
查看>>
Enumberable
查看>>
开发者论坛一周精粹(第五十四期) 求购备案服务号1枚!
查看>>
validate表单验证及自定义方法
查看>>
javascript 中出现missing ) after argument list的错误
查看>>
使用Swagger2构建强大的RESTful API文档(2)(二十三)
查看>>
Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work
查看>>
(转)第三方支付参与者
查看>>
程序员修炼之道读后感2
查看>>
DWR实现服务器向客户端推送消息
查看>>
js中forEach的用法
查看>>
Docker之功能汇总
查看>>
!!a标签和button按钮只允许点击一次,防止重复提交
查看>>
(轉貼) Eclipse + CDT + MinGW 安裝方法 (C/C++) (gcc) (g++) (OS) (Windows)
查看>>
还原数据库
查看>>
作业调度框架 Quartz.NET 2.0 beta 发布
查看>>