正题


题目大意

长度为nnn的序列,分割成两个上升子序列要求长度差最小


解题思路

我们对于i<j,ai≥aji<j,a_i\geq a_ji<j,ai​≥aj​的点之间连边,然后可以对于一个联通块进行二分图染色,我们可以发现,如果我们先固定一个点的颜色,那么这个联通块的二分图染色方案数为1或0。

之后两个联通块互不影响,所以我们可以用dpdpdp来计算方案。

考虑继续优化,我们可以发现如果iii到jjj之间有连边,那么对于任意一个i<k<ji<k<ji<k<j,iii和kkk和jjj必定联通,那么我们可以推得一个联通块必定是一个区间,而一个区间的分界点满足该点前面的所有数都比后面的所有数要小。

因为划分方案数为2cnt2^{cnt}2cnt(cnt为联通块数量。所以联通块数量不超过log(1e18)log(1e18)log(1e18),可以通过本题


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
const int N=1e5+10,K=300;
int T,n,a[N],maxs[N],mins[N];
int cnt,b[K],e[K],z[K];
bool f[2][N];
stack<int> q1,q2;
int main()
{//freopen("sample2.in","r",stdin);scanf("%d",&T);while(T--){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);maxs[i]=max(maxs[i-1],a[i]);}mins[n+1]=2147483647/3;cnt=0;for(int i=n;i>=1;i--)mins[i]=min(mins[i+1],a[i]);for(int i=1;i<=n;i++)if(maxs[i]<=mins[i+1]||i==n)b[++cnt]=e[cnt-1]+1,e[cnt]=i;bool flag=0;for(int i=1;i<=cnt;i++){while(!q1.empty())q1.pop();while(!q2.empty())q2.pop(); for(int j=b[i];j<=e[i];j++){if(q1.empty()||a[j]>q1.top())q1.push(a[j]);else if(q2.empty()||a[j]>q2.top())q2.push(a[j]);else{flag=1;break;}}if(flag)break;z[i]=q1.size()-q2.size();}if(flag){printf("-1\n");continue;}memset(f,0,sizeof(f));f[0][0]=1;for(int i=1;i<=cnt;i++)for(int j=0;j<=n;j++)f[i&1][j]=f[~i&1][abs(j-z[i])]|f[~i&1][abs(j+z[i])];for(int j=0;j<=n;j++)if(f[cnt&1][j]){printf("%d\n",j);break;}}
}

nssl1488-上升子序列【贪心,dp】相关推荐

  1. URAL 1203 Scientific Conference(贪心 || DP)

    Scientific Conference 之前一直在刷计算几何,邀请赛连计算几何的毛都买见着,暑假这一段时间就做多校,补多校的题目,刷一下一直薄弱的DP.多校如果有计算几何一定要干掉-.- 题意:给 ...

  2. Codeforces Round #699 (Div. 2) E.Sorting Books(贪心+DP / 线段树)超高质量题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 E - Sorting Books 一排书架上有 nnn 本书排成一排,每本书上有一个颜色 aia_i ...

  3. 【bzoj3174】[Tjoi2013]拯救小矮人 贪心+dp

    题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚 ...

  4. 杭电oj1257最少拦截系统—贪心/dp最大递增子序列

    附上题目链接:杭电oj1257 这个题目有动态规划和贪心两种解决方式. 贪心法1: 对于导弹我们知道只可以从大到小的反导,一个系统必须从大到小排列.那么我们就可以选择从最高的那个导弹入手,往右找仅次于 ...

  5. CF1155D Beautiful Array 贪心,dp

    CF115DBeautiful Array 题目大意:给一个有n个元素的a数组,可以选择其中一个区间的所有数都乘上x,也可以不选,求最大子序列和. 如果没有前面的操作,就是只求最大子序列和,我们都知道 ...

  6. 尽梨了(贪心+dp)

    尽梨了 problem solution code problem 丰之崎学园附近共有 nnn 个商店,在时刻 000 时,英梨梨从学园出发开始购物. 从学园走到任意一个商店,或从一个商店走到另一个商 ...

  7. HDU 4001 To Miss Our Children Time(2011年大连网络赛 A 贪心+dp)

    开始还觉得是贪心呢...  给你三类积木叫你叠楼房,给你的每个积木包括四个值:长 宽(可以互换) 高 类型d  d=0:你只能把它放在地上或者放在 长 宽 小于等于 自己的积木上面  d=1:你只能把 ...

  8. 【BZOJ4069】【APIO2015】巴厘岛的雕塑 [贪心][DP]

    巴厘岛的雕塑 Time Limit: 10 Sec  Memory Limit: 64 MB [Submit][Status][Discuss] Description 印尼巴厘岛的公路上有许多的雕塑 ...

  9. 洛谷 P1410 子序列(DP)

    这题的题解的贪心都是错误的...正解应该是个DP 考虑有哪些有关的条件:两个序列的当前长度, 两个序列的末尾数, 把这些都压进状态显然是会GG的 考虑两个长度加起来那一位的数一定是其中一个序列的末尾, ...

最新文章

  1. flask渲染图像_用于图像推荐的Flask应用
  2. C#的变迁史09 - C# 5.0 之调用信息增强篇
  3. 做到阿里P7和考上985/211哪个更难?
  4. Vysor_2.1.2破解,及安装包
  5. 计算机中 堆 、栈、
  6. Fiddler-半自动构造少量数据
  7. java图片色差_java – JPEG图像的颜色错误
  8. c ++中哈希表如何访问_C / C ++中的哈希表–完整的实现
  9. [USACO12NOV]同时平衡线Concurrently Balanced Strings DP map 思维
  10. 【学习】在Windows10平台使用Docker ToolBox安装docker(一)
  11. 加解密:MD5DesAesRSARSA C#和Java适配
  12. touchmove 长按_「jQuery实现移动端长按事件」- 海风纷飞Blog
  13. LBS与空间索引原理
  14. 计算机证件照无法上传,计算机IE浏览器为什么不能上传照片
  15. arduino数字端口输出电压可驱动多大继电器呢_「白皮书」数字信号与脉冲序列调理...
  16. 渐进式 Web 应用程序介绍
  17. 解决 `Failed to connect to github.com port 443: Connection refused`
  18. 20192132055 李欣桐第二次作业
  19. Android获取WifiMac地址
  20. 股票数据尤其是从雅虎财经yahoo finance或者google finance中获取的股票数据中Adj close是什么意思?

热门文章

  1. 爬取三千条数据需要多久_存储-性能,IOPS,带宽,吞吐量,1TB数据需要多久写完...
  2. php mysql 执行sql文件_PHP执行SQL文件并将SQL文件导入到数据库_PHP
  3. python 中文编码差异_Python 编码为什么那么蛋疼?
  4. html如何链接sql sever,SQL Server链接服务器
  5. 地图统计_连吃七八个都不够!太仓不完整包子统计地图来了!
  6. 计算机所有数据的表示方式都是用,计算机数据表示
  7. java中nextLine(),读取换行符的解决
  8. [Spring5]AOP底层原理
  9. C++ 实现布隆过滤器(BloomFilter)
  10. Zookeeper实践与应用- Canal