思路:这题的感觉就是最长上升子序列的升级版。首先对于最长上升子序列要用n*log(n)的算法才行,这个复杂度的算法可以从hdu1025得到启发。然后就是什么情况下最优问题了。对于序列中某个数i,找出其后面最长不下降子序列长度和最长不上升子序列长度,将这两个长度加起来,最大的就是我们要找到。但由于存在相同值,那么我么就要确定这两个子序列中值为i的个数最少的那个,用上面求得和减去它。

我的代码比较挫。

#include<iostream>
#include<cstring>
#include<cmath>
#include<string>
#include<cstdio>
using namespace std;
int ans[],list[],low[],more[],same[];
int main()
{
int t,n,i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(low,,sizeof(low));
memset(more,,sizeof(more));
memset(same,,sizeof(same));
for(i=;i<=n;i++)
scanf("%d",&list[i]);
int len;
ans[]=list[n];
low[n]=;
len=;
same[n]=;
int l,r,mid;
for(i=n-;i>=;i--)
{
if(ans[len]>=list[i])
{
ans[++len]=list[i];
low[i]=len;
}
else
{
l=;
r=len;
while(l<=r)
{
mid=(l+r)>>;
if(ans[mid]>=list[i])
l=mid+;
else
r=mid-;
}
ans[l]=list[i];
low[i]=l;
}
l=,r=len;
while(l<=r)
{
mid=(l+r)>>;
if(ans[mid]>list[i])
l=mid+;
else
r=mid-;
}
same[i]=low[i]-r;
}
ans[]=list[n];
len=;
more[n]=;
for(i=n-;i>=;i--)
{
if(ans[len]<=list[i])
{
ans[++len]=list[i];
more[i]=len;
}
else
{
l=;
r=len;
while(l<=r)
{
mid=(l+r)>>;
if(ans[mid]<=list[i])
l=mid+;
else
r=mid-;
}
ans[l]=list[i];
more[i]=l;
}
l=,r=len;
while(l<=r)
{
mid=(l+r)>>;
if(ans[mid]<list[i])
l=mid+;
else
r=mid-;
}
same[i]=min(more[i]-r,same[i]);
}
int Ans=;
for(i=;i<=n;i++)
Ans=max(Ans,low[i]+more[i]-same[i]);
printf("%d\n",Ans);
}
return ;
}

hdu 4604 动态规划的更多相关文章

  1. hdu 1087 动态规划之最长上升子序列

    http://acm.hdu.edu.cn/showproblem.php?pid=1087 Online Judge Online Exercise Online Teaching Online C ...

  2. hdu 4604 Deque

    http://acm.hdu.edu.cn/showproblem.php?pid=4604 将原数组根据其大小关系处理后 使其大小全在10^5内 处理后为 a1,a2,a3.....an 最优deq ...

  3. hdu 4604 Deque(最长上升与下降子序列-能够重复)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4604 这个题解有点问题,暂时没时间改,还是参考别人的吧 #include <cstdio> ...

  4. HDU 4604 Deque 最长子序列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4604 Deque Time Limit: 4000/2000 MS (Java/Others)     ...

  5. HDU 1003 动态规划

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 这几天开始刷动归题目,先来一道签到题 然而做的并不轻松, 没有注意到边界问题, WA了几发才发现 #inc ...

  6. hdu 4055 && hdu 4489 动态规划

    hdu 4055: 一开始我想的递推方向想得很复杂,看了别人的博客后才醍醐灌顶: 参照他的思路和代码: #include<cstdio> #include<cstring> # ...

  7. hdu 4745 动态规划

    思路:特水的一个最长回文子序列动态规划.比赛时硬卡第一题,49WA后终于AC,可惜没时间做这题,结果成绩也就可想而知了.兔子跳一样权值的石头,并且一个正跳,一个反跳,这不就是个回文子序列吗?????! ...

  8. hdu 4711 动态规划

    思路:其实这题是个挺水的动态规划,一开始就能AC,可是不知道错哪了,瞎改瞎交,WA了数十次.AC之后怎么改都是AC,也不知道改了什么地方,郁闷死了~~~难道开始时的测试数据有问题??? dp[i][j ...

  9. HDU 6076 (动态规划)

    HDU 6076 Security Check Problem : 有两个长度为n的队列过安检,每个人有一个特征值.如果两个队列中的第一个人的特征值之差小于等于k,那么一次只能检查其中一个人,否则一次 ...

随机推荐

  1. 总结:常用的Linux系统监控命令

    记录一下自己常用的linux系统命令,方便以后查阅,发觉记忆越来越不行了 找到最耗CPU的java线程 ps命令 命令: ps -mp pid -o THREAD,tid,time 或者 ps -Lf ...

  2. Educational Codeforces Round 15 (A - E)

    比赛链接:http://codeforces.com/contest/702 A. Maximum Increase A题求连续最长上升自序列. [暴力题] for一遍,前后比较就行了. #inclu ...

  3. matlab和FPGA中无符号数和有符号数的转化(转)

    在FPGA 设计过程中经常会遇到关于数表示之间的转化问题,最常见的是无符号数和有符号数之间的转化问题.(1)在FPGA设计过程中,能够很直接的看出数字的位宽,但经常以无符号数的形式输出,在后继的处理中 ...

  4. eclipse scons 使用指南

    http://sconsolidator.com/projects/sconsolidator/wiki/Getting_Started Add SCons support to an existin ...

  5. protoc-gen-lua

    lua里使用proto buffer protoc-gen-lua 官方不维护了,自己维护个:protoc-gen-lua int64支持,将64位int转换成lua的string. message相 ...

  6. OA系统权限管理设计(转载)

    不论什么系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统加入亮点. l         不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是 ...

  7. Java网页数据采集器[下篇-数据查询]【转载】

    本期概述 上一期我们学习了如何将html采集到的数据存储到MySql数据库中,这期我们来学习下如何在存储的数据中查询我们实际想看到的数据. 数据采集页面 2011-2012赛季英超球队战绩 如果是初学 ...

  8. Caching in ASP.NET MVC

    The caching options available in ASP.NET MVC applications don’t come from the ASP.NET MVC Framework, ...

  9. 使用IIS 7.0 Smooth Streaming 优化视频服务

    http://www.cnblogs.com/dudu/archive/2013/06/08/iis_webserver_settings.html (支持高并发的IIS Web服务器常用设置) ht ...

  10. MySQL server version for the right syntax to use near ‘USING BTREE

    转自:http://www.douban.com/note/157818842/ 有时导入mysql会提示如下错误: C:\Users\liqiang>mysql -uroot -paaaaaa ...