hdu5773 The All-purpose Zero 贪心+最长上升子序列
题目大意:可以将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 贪心+最长上升子序列相关推荐
- (贪心+最长上升子序列) acwing 896. 最长上升子序列 II
896. 最长上升子序列 II 题目链接https://www.acwing.com/problem/content/898/ 题目: 思路:在队列里求出小于t的最大的一个数的下标.a[0]初始化最小 ...
- 【bzoj5427】最长上升子序列(贪心+LIS)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5427 因为noip,博客咕了好久,这几天集中填一下坑. 这题我们可以假设往不确定的空位 ...
- 【HDU - 1257】最少拦截系统 (标解dp,贪心可过,最长上升子序列类问题)
题干: 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来 ...
- 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 ...
- 拦截导弹(dp【最长上升子序列模型】 + 贪心)
AC Wing 1010 拦截导弹 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度 ...
- LIS最长上升子序列详解(动态规划、贪心+二分、树状数组)
1.摘要: 关于LIS部分,本篇博客讲一下LIS的概念定义和理解,以及求LIS的三种方法,分别是O(n^2)的DP,O(nlogn)的二分+贪心法,以及O(nlogn)的树状数组优化的DP,最后附上几 ...
- 最长上升子序列计数(dp, 计数,二分,贪心, 数据结构维护),dp12
//http://oj.daimayuan.top/problem/135 最长上升子序列(不带计数) #include<bits/stdc++.h> #include<unorde ...
- 线段树合并与分裂维护树上最长上升子序列 + 点分治删点 ---- 2021 牛客多校第一场 C - Cut the tree(详解)
题目大意: 给你一个树,树上每个点都有一个权值valnodeval_{node}valnode,路径(u,v)(u,v)(u,v) 上所有点按顺序有序序列,令f(u,v)f(u,v)f(u,v)是这 ...
- 【动态规划专题】最长上升子序列模型
题目 算法 A.AcWing 895. 最长上升子序列 模板 B.AcWing1017. 怪盗基德的滑翔翼 最长上升子序列/最长下降子序列 C.AcWing 1014. 登山 最长上升子序列/最长下降 ...
- 最长上升子序列(LIS)/最长不上升子序列问题算法详解+例题(树状数组/二分优化,看不懂你来打我)
目录 最长上升子序列 一.朴素做法O(2n)O(2^n)O(2n) 二.优化做法O(nlogn)O(nlogn)O(nlogn) 三.例题引入:P1020 导弹拦截(求最长上升子序列和最长不上升子序列 ...
最新文章
- android bitmap 转drawable,android Drawable转换成Bitmap失败
- linux删除文件夹命令6,linux 结合find命令进行文件的删除
- c++ 利用boost 实现文件操作
- ANSI编码和Unicode编码的不同
- 进程调试--进程启动VS自动附加
- Solarized ----vim配色方案
- 云服务器支持javascript,云服务器支持javascript
- Jquery调用Web Service
- 3.7 Spark RDD编程
- 轻量通用型互联网应用架构
- JXSL报错CannotOpenWorkbookException和Cannot load XLS transformer解决方案
- hive建表语句comment 中文描述乱码
- AD15将PCB变为自己想要的形状
- Python+旧衣物捐赠系统 毕业设计-附源码290942
- 图论·并查集·题解【Cow at Large G·atlarge】
- 自定义控件之仿电话簿汉字排序侧边拼音
- html设置超出两行显示省略号,css 文本两行显示,超出省略号表示
- php如何在微信公众号项目中,跳转到公众号关注页面
- 自然语言处理python培训
- 帮你学会webpack
热门文章
- python可以数独游戏吗_Python数独游戏
- 染色基础知识(四)——怎么染?
- WinCC 中批量绑定变量
- 2. Vue prevent修饰符
- unserialize():Error at offset 0 of 96 bytes是什么意思
- 拓扑结构计算机网络结构,什么是计算机网络的拓扑结构
- Win7激活工具无效?输入SLMGR -REARM显示不是内部命令?
- 微软代码签名证书使用指南(SignTool)
- 服务器维护以后多久刷潮汐护符,魔兽世界怀旧服潮汐护符怎么获得
- python生成一维数组_如何用python随机产生一个一维数组?