HDU 5773 DP LIS变形
题目链接
题意:一个非负序列里 0可以变成包括负数在内的任何数 问这个序列的最长严格上升子序列有多长
官方给的题解:0可以转化成任意整数,包括负数,显然求LIS时尽量把0都放进去必定是正确的。因此我们可以把0拿出来,对剩下的做O(nlogn)的LIS,统计结果的时候再算上0的数量。为了保证严格递增,我们可以将每个权值S[i]减去i前面0的个数,再做LIS,就能保证结果是严格递增的。
条件一:这个最长的上升子序列一定包含了原始序列中的全部0
证明:假设一个某个上升子序列不完全包含全部的0,这样我们可以将没有被包含的0加入这个序列中,由于0可以变为任何数,所以新序列的长度一定大于等于原序列的长度
题解没看懂……但是照着题解写 还是AC了
代码:
#include <cstdio>
#include <iostream>
#define sf scanf
#define pf printf
using namespace std;
const int maxn = 100000 + 5;
int num[maxn];
int g[maxn];int main(){int T,ca = 0;sf("%d",&T);while( T-- ){int n;sf("%d",&n);int pre_zero = 0,num_size = 0;for(int i = 0;i < n;++i){int temp;sf("%d",&temp);if(!temp) pre_zero++;else{num[num_size++] = temp - pre_zero;}}int ans = 0;if(!num_size){ans = 0;}else{ans = 1;g[1] = num[0];for(int i = 1;i < num_size;++i){if(num[i] > g[ans]){g[++ans] = num[i];}else{int k = lower_bound(g + 1,g + ans + 1,num[i]) - g;g[k] = num[i];}}}pf("Case #%d: %d\n",++ca,ans + pre_zero);}return 0;
}
HDU 5773 DP LIS变形相关推荐
- HDU 5928 DP 凸包graham
给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也 ...
- hdu 1171 dp(多重背包)
View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...
- UVA 1471 Defense Lines (LIS变形)
题意:删除原序列中的一段连续子序列,使得剩下的序列中存在一段最长连续子序列. 题解:LIS变形 我们用l[i]l[i]l[i]和r[i]r[i]r[i]记录往右以iii结尾和往左以iii开头的最长连续 ...
- HDU 5773 The All-purpose Zero(O(nlgn)求LIS)
http://acm.hdu.edu.cn/showproblem.php?pid=5773 题意: 求LIS,其中的0可以看做任何数. 思路: 因为0可以看做任何数,所以我们可以先不管0,先求一遍L ...
- hdu 5087(LIS变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5087 解题思路:这道题其实仔细想想很简单,次长LIS只有两种可能,一种就是等于LIS-1,一种就是LI ...
- HDU 4352 数位dp + LIS(nlogn) + 状态压缩
#define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefully reading the entir ...
- hdu(1069)——Monkey and Banana(LIS变形)
题意: 如今给你n个石块,然后它由坐标来表示(x,y,z).可是它能够有不同的方法,也就是说它的三个坐标能够轮换着来的. 石块的数量不限,可是每次都必须保持上底面的长和宽严格递减,然后问你用这些石块所 ...
- hdu 5256 LIS变形
给一个数列,问最少修改多少个元素使数列严格递增.如果不是要求"严格"递增,那就是求最长不降子序列LIS,然后n-LIS就是答案.要严格递增也好办,输入的时候用每个数减去其下标处理一 ...
- hdu 5256 序列变换 (LIS变形)
序列变换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU - 3564 Another LIS(LIS+线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=3564 题意 给出1~n的插入顺序,要求每次插入之后的LIS 分析 首先用线段树还原出最终序列.因为插入的顺序是按 ...
最新文章
- 超越BERT的模型有哪些?
- c语言程序设计数据输入的,1.2 C语言的发展与特点免费阅读_C语言程序设计教程免费全文_百度阅读...
- js 对已知数组数据的导出EXCEL
- linux网卡名称乱编,小斗CentOS7.x网卡名称错乱、及网卡启动失败。
- [js] innerHTML有什么缺点?
- java前言_Java Web前言
- python xposed_GitHub - twqdev/CPWechatXposed: 使用Xposed Hook微信等APP
- LINUX入侵检测指导
- php生成随机不重复的数字_PHP生成不重复随机数的几种方法
- Python重复字符串并使用指定分隔符进行连接
- 编码的未来是“无代码”
- MySQL读写分离详解(二)——MyCAT实战配置
- Python 深入浅出 - HelloWorld
- 图像处理中的白化处理
- 《孙子兵法》对现代战争还适用吗?为什么?
- github首次使用提交项目
- 【物理】半导体物理 西安电子科技大学 柴常春等主讲-[笔记P15-P18]
- Android之如何分析手机系统相册图片和视频删除后保存的位置
- javascript轮播技术
- 什么是拓扑(Topology) - 3D 角色 建模过程中的 中的术语:拓扑
热门文章
- inventor 波纹阵列_Inventor装配零部件阵列功能详解
- 我的世界热力膨胀JAVA_我的世界TE4教程热力膨胀能源炉的合成与使用数据
- java 返回指定月份的最后一天的59分59秒
- [论文阅读笔记]DeepFool: a simple and accurate method to fool deep neural networks
- 解读提升百度权重-刷百度指数的方法
- python爬取别人qq空间相册_用python爬取QQ空间
- 普通住宅和非普通住宅税费
- 简单代码变出超个性化的QQ昵称
- 括号匹配(POJ2955)题解
- android 测光模式,Android 测光梳理