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

题目大意:求次大LIS的长度。注意两个长度相同的LIS大小比较,下标和大的LIS较大。

解题思路

结构体记录当前点的最大长fir,次长sec。

对于f[i].fir的转移,其实就是裸的LIS。

只不过当f[j].fir+1>=f[i].fir的时候也要转移,这时候尽管两个LIS长度相等,但是大小不一样。

对于f[i].sec的转移,首先它的初始值是0,在a[i]>a[j]条件下:

①首先当f[j].fir+1>=f[i].fir时:

我们肯定有最大长f[j].fir+1,剩下f[i].fir和f[j].sec+1,中出一个次长。

②当f[j].fir+1<f[i].fir时,此时最大长已经确定,但是却多出了个次长的可选值f[j].fir+1,注意得+1

HDU的数据略水,不+1也能水过去。

完成f[i]的转移之后,更新全局结果fir,sec。我一开SB地认为最后结果sec肯定在所有f[i].sec里面。

其实sec还可以是f[i].fir,它是全局的次长。

①如果f[i].fir>=fir(还是得相等,尽管长度一样)

此时次长有三个备选答案:fir,f[i].sec,sec,很明显fir>=sec,所以舍掉sec。

再更新一下最长fir。

②如果f[i].fir<fir,那么f[i].fir可能成为次长,HDU的数据略水,没有这步也能水过去。

#include "cstdio"
#include "cstring"
#include "iostream"
using namespace std;
int a[];
struct status
{
int fir,sec;
status() {}
status(int fir,int sec):fir(fir),sec(sec) {}
}f[];
int main()
{
//freopen("in.txt","r",stdin);
int T,n;
scanf("%d",&T);
while(T--)
{
int fir=,sec=;
memset(f,,sizeof(f));
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=n;i++)
{
f[i]=status(,);
for(int j=;j<i;j++)
{
if(a[i]>a[j])
{
if(f[j].fir+>=f[i].fir)
{
f[i].sec=max(f[i].fir,f[j].sec+);
f[i].fir=f[j].fir+;
}
else f[i].sec=max(f[i].sec,f[j].fir+);
}
}
if(f[i].fir>=fir)
{
sec=max(f[i].sec,fir);
fir=f[i].fir;
}
else sec=max(sec,f[i].fir);
}
printf("%d\n",sec);
}
}
12046191 2014-11-02 00:56:35 Accepted 5087 125MS 240K 1099 B C++ Physcal

HDU 5087 (线性DP+次大LIS)的更多相关文章

  1. 线性DP总结(LIS,LCS,LCIS,最长子段和)

    做了一段时间的线性dp的题目是时候做一个总结 线性动态规划无非就是在一个数组上搞嘛, 首先看一个最简单的问题: 一,最长字段和 下面为状态转移方程 for(int i=2;i<=n;i++) { ...

  2. hdu 4352 数位dp+nlogn的LIS

    题意:求区间L到R之间的数A满足A的的数位的最长递增序列的长度为K的数的个数. 链接:点我 该题的关键是记录LIS的状态,学习过nlogn解法的同学都知道,我们每次加入的元素要和前面的比对替换,这里就 ...

  3. HDU - 2154 线性dp

    思路:0表示A,1表示B,2表示C,d(i, j)表示在第j次时正好到达i. AC代码 #include <cstdio> #include <cmath> #include ...

  4. HDU 4540 线性DP

    威威猫系列故事——打地鼠 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  5. hdu 5087 Revenge of LIS II ( LIS ,第二长子序列)

    链接:hdu 5087 题意:求第二大的最长升序子序列 分析:这里的第二大指的是,全部的递增子序列的长度(包含相等的), 从大到小排序后.排在第二的长度 cid=546" style=&qu ...

  6. HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化)

    HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化) 题意分析 首先C表示测试数据的组数,然后给出经费的金额和大米的种类.接着是每袋大米的 ...

  7. 1. 线性DP 300. 最长上升子序列 (LIS)

    最经典单串: 300. 最长上升子序列 (LIS) https://leetcode-cn.com/problems/longest-increasing-subsequence/submission ...

  8. HDU 1069 Monkey and Banana(线性DP)

    Description   A group of researchers are designing an experiment to test the IQ of a monkey. They wi ...

  9. 动态规划_线性dp

    https://www.cnblogs.com/31415926535x/p/10415694.html 线性dp是很基础的一种动态规划,,经典题和他的变种有很多,比如两个串的LCS,LIS,最大子序 ...

随机推荐

  1. lucene搜索方式(query类型)

    Lucene有多种搜索方式,可以根据需要选择不同的方式. 1.词条搜索(单个关键字查找) 主要对象是TermQuery 调用方式如下: Term term=new Term(字段名,搜索关键字);Qu ...

  2. Coursera台大机器学习技法课程笔记01-linear hard SVM

    极其淡腾的一学期终于过去了,暑假打算学下台大的这门机器学习技法. 第一课是对SVM的介绍,虽然之前也学过,但听了一次感觉还是很有收获的.这位博主总结了个大概,具体细节还是 要听课:http://www ...

  3. The content of element type "package" must match "(result-types?,interceptors?...

    错误:“The content of element type "package" must match "(result-types?,interceptors?,de ...

  4. 关于DCMTK3.6.0源代码编译的总结

    1.DCMTK cmake出来的代码是一样的.MT和MD版本的区别在于DCMTK工程下的每个子工程的代码生成中的MT还是MD,只要修改成为相应的值就可以了. 2.依赖包的选择.依赖包必须与上面中所说的 ...

  5. Excel Sheet Column Title & Excel Sheet Column Number

    Excel Sheet Column Title Given a positive integer, return its corresponding column title as appear i ...

  6. php-fpm 进程管理

    2015年2月26日 15:40:15 先查找 PHP-FPM 的进程号 ps -ef | grep php-fpm root Feb12 ? :: php-fpm: master process ( ...

  7. 让Delphi的DataSnap发挥最大效率

    让Delphi的DataSnap发挥最大效率 让Delphi的DataSnap发挥最大效率 一个DataSnap的应用程序由两个层组成: DataSnap服务器,它有一个带有一个或者更多DataSet ...

  8. Java for LeetCode 073 Set Matrix Zeroes

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 解题思路: ...

  9. fedora yum 使用代理的方法

    配置yum: 编辑/etc/yum.conf添加下列一行: proxy=http://domain/user:passwd@<proxy ip>:80 <proxy ip>:代 ...

  10. Myeclipse中全部文件设置成UTF-8

    如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,Eclipse工作空间(workspace)的缺省字符编码是操作系统缺省的编码,简 ...