题目大意:可以将0替换成任意interger(包括负数),在此基础上求最长递增子序列。

解题思路:无疑LIS,将所有的0全部提取出来,求出此时序列的LIS(不含0的),这是针对0在子序列的外面的情况,如0,1,2,3,0.那么如果0在子序列中间怎么办?

很简单,把读入的非0的数的值减去这个数前面0的个数即可,

如1,2,0,3,4。在提取出0后序列其实为1,2,2,3,LIS的长度为3,加上0的个数则为答案。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
#include <ctime>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<iomanip>
#include<cmath>
#include<bitset>
#define mst(ss,b) memset((ss),(b),sizeof(ss))
///#pragma comment(linker, "/STACK:102400000,102400000")
typedef long long ll;
#define INF (1ll<<60)-1
#define Max 1e9
using namespace std;
int sum[100100];
int a[100100],s[100100],vis[100100];
int main(){  int T,n;  scanf("%d",&T);  for(int cas=1;cas<=T;cas++){  scanf("%d",&n);  mst(vis,0);  for(int i=1;i<=n;i++) scanf("%d",&a[i]);  sum[0]=0;  for(int i=1;i<=n;i++) {  if(a[i]==0) sum[i]=sum[i-1]+1;  else sum[i]=sum[i-1];  }  for(int i=1;i<=n;i++) {  if(a[i]==0) {  vis[i]=1;  continue;  }  a[i]-=sum[i];  }  //for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;  int ans=sum[n];  int cnt=0;  s[0]=-1e9;  for(int i=1;i<=n;i++){  if(vis[i]==1) continue;  if(a[i]>s[cnt]) s[++cnt]=a[i];  else {  int x=lower_bound(s,s+cnt+1,a[i])-s;  s[x]=a[i];  }  }  //for(int i=0;i<=cnt;i++) cout<<s[i]<<" ";cout<<endl;  ans+=cnt;  printf("Case #%d: %d\n",cas,ans);  }  return 0;
} 

hdu5773 The All-purpose Zero 贪心+最长上升子序列相关推荐

  1. (贪心+最长上升子序列) acwing 896. 最长上升子序列 II

    896. 最长上升子序列 II 题目链接https://www.acwing.com/problem/content/898/ 题目: 思路:在队列里求出小于t的最大的一个数的下标.a[0]初始化最小 ...

  2. 【bzoj5427】最长上升子序列(贪心+LIS)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5427 因为noip,博客咕了好久,这几天集中填一下坑. 这题我们可以假设往不确定的空位 ...

  3. 【HDU - 1257】最少拦截系统 (标解dp,贪心可过,最长上升子序列类问题)

    题干: 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来 ...

  4. Codeforces Round #620 (Div. 2)(D. Shortest and Longest LIS)(O(n log n)的最长上升子序列或者贪心)

    Codeforces Round #620 (Div. 2)(D. Shortest and Longest LIS)(O(n log n)的最长上升子序列或者贪心) time limit per t ...

  5. 拦截导弹(dp【最长上升子序列模型】 + 贪心)

    AC Wing 1010 拦截导弹 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度 ...

  6. LIS最长上升子序列详解(动态规划、贪心+二分、树状数组)

    1.摘要: 关于LIS部分,本篇博客讲一下LIS的概念定义和理解,以及求LIS的三种方法,分别是O(n^2)的DP,O(nlogn)的二分+贪心法,以及O(nlogn)的树状数组优化的DP,最后附上几 ...

  7. 最长上升子序列计数(dp, 计数,二分,贪心, 数据结构维护),dp12

    //http://oj.daimayuan.top/problem/135 最长上升子序列(不带计数) #include<bits/stdc++.h> #include<unorde ...

  8. 线段树合并与分裂维护树上最长上升子序列 + 点分治删点 ---- 2021 牛客多校第一场 C - Cut the tree(详解)

    题目大意: 给你一个树,树上每个点都有一个权值valnodeval_{node}valnode​,路径(u,v)(u,v)(u,v) 上所有点按顺序有序序列,令f(u,v)f(u,v)f(u,v)是这 ...

  9. 【动态规划专题】最长上升子序列模型

    题目 算法 A.AcWing 895. 最长上升子序列 模板 B.AcWing1017. 怪盗基德的滑翔翼 最长上升子序列/最长下降子序列 C.AcWing 1014. 登山 最长上升子序列/最长下降 ...

  10. 最长上升子序列(LIS)/最长不上升子序列问题算法详解+例题(树状数组/二分优化,看不懂你来打我)

    目录 最长上升子序列 一.朴素做法O(2n)O(2^n)O(2n) 二.优化做法O(nlogn)O(nlogn)O(nlogn) 三.例题引入:P1020 导弹拦截(求最长上升子序列和最长不上升子序列 ...

最新文章

  1. android bitmap 转drawable,android Drawable转换成Bitmap失败
  2. linux删除文件夹命令6,linux 结合find命令进行文件的删除
  3. c++ 利用boost 实现文件操作
  4. ANSI编码和Unicode编码的不同
  5. 进程调试--进程启动VS自动附加
  6. Solarized ----vim配色方案
  7. 云服务器支持javascript,云服务器支持javascript
  8. Jquery调用Web Service
  9. 3.7 Spark RDD编程
  10. 轻量通用型互联网应用架构
  11. JXSL报错CannotOpenWorkbookException和Cannot load XLS transformer解决方案
  12. hive建表语句comment 中文描述乱码
  13. AD15将PCB变为自己想要的形状
  14. Python+旧衣物捐赠系统 毕业设计-附源码290942
  15. 图论·并查集·题解【Cow at Large G·atlarge】
  16. 自定义控件之仿电话簿汉字排序侧边拼音
  17. html设置超出两行显示省略号,css 文本两行显示,超出省略号表示
  18. php如何在微信公众号项目中,跳转到公众号关注页面
  19. 自然语言处理python培训
  20. 帮你学会webpack

热门文章

  1. python可以数独游戏吗_Python数独游戏
  2. 染色基础知识(四)——怎么染?
  3. WinCC 中批量绑定变量
  4. 2. Vue prevent修饰符
  5. unserialize():Error at offset 0 of 96 bytes是什么意思
  6. 拓扑结构计算机网络结构,什么是计算机网络的拓扑结构
  7. Win7激活工具无效?输入SLMGR -REARM显示不是内部命令?
  8. 微软代码签名证书使用指南(SignTool)
  9. 服务器维护以后多久刷潮汐护符,魔兽世界怀旧服潮汐护符怎么获得
  10. python生成一维数组_如何用python随机产生一个一维数组?