hdu5256序列变换(非递减子序列)
题意(中文直接粘吧)
序列变换
Problem Description
我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增。其中无论是修改前还是修改后,每个元素都必须是整数。
请输出最少需要修改多少个元素。
Input
第一行输入一个T(1≤T≤10),表示有多少组数据
每一组数据:
第一行输入一个N(1≤N≤105),表示数列的长度
第二行输入N个数A1,A2,...,An。
每一个数列中的元素都是正整数而且不超过106。
Output
对于每组数据,先输出一行
Case #i:
然后输出最少需要修改多少个元素。
Sample Input
2
2
1 10
3
2 5 4
思路:
比较有意思的一个题,我的第一反应是n-上升子序列,这样显然不对,因为1 2 3 3 4 5这样就是6-5=1,那个多出来的3怎么改都不行的,其实可以这样转化问题,我们把每个数字都对应减去他们的位置编号,比如
1 2 4 6 9 8
-1 -2 -3 -4 -5 -6
这样得到
0 0 1 2 5 2
这样做到底为了什么呢?就是为了排除相等的情况,第i个位置最少要比i+1个位置少1,而i最少要比i+2的位置少2,这样的话,我们只要全部减去自己位置的编号就相当于直接处理好了所有的位置关系,处理好之后我们就直接n-最大非递减子序列就行了,非递减子序列可以按找递增子序列的那个方法弄,简单改下就行,还有注意可以用二分贪心的那个方法,普通暴力的方法会超时吧N*N的。总体的时间复杂度是O(n*log(n))的没啥压力。
#include<stdio.h>
#include<string.h>#define N 100000 + 100int num[N] ,now[N];int main ()
{int t ,cas = 1 ,i ,n;int low ,up ,mid ,len;scanf("%d" ,&t);while(t--){scanf("%d" ,&n);for(i = 1 ;i <= n ;i ++){scanf("%d" ,&num[i]);num[i] -= i;}len = 1;now[1] = num[1];for(i = 2 ;i <= n ;i ++){low = 1 ,up = len;while(low <= up){mid = (low + up) >> 1;if(now[mid] <= num[i])low = mid + 1;else up = mid - 1;}now[low] = num[i];if(low > len) len ++;}printf("Case #%d:\n" ,cas ++);printf("%d\n" ,n - len);}return 0;
}
hdu5256序列变换(非递减子序列)相关推荐
- c语言连续非递减子序列,最长非递减子序列的应用
Description 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元素都必须是整数. 请输出最少需要修改多少个元素. In ...
- 动态规划(3):最长非递减子序列
题目 在一个数字序列中,找到一个最长的子序列(可以不连续),使得这个子序列是不下降(非 递减)的. 样例 输入 8 1 2 3 -9 3 9 0 11 输出 6 题解 最优子结构(举例):以3结尾的最 ...
- 【Effect CodeForces - 270D】Greenhouse (思维,最长非递减子序列(上升),对偶问题,考虑反面)
题干: Emuskald is an avid horticulturist and owns the world's longest greenhouse - it is effectively i ...
- Java_[排序子序列]牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。
链接:https://www.nowcoder.com/questionTerminal/2d3f6ddd82da445d804c95db22dcc471? 牛牛定义排序子序列为一个数组中一段连续的子 ...
- 华为OD笔试202010OD笔试华为OD第二题最长的非递减连续子序列的长度
华为OD笔试202010OD笔试华为OD第二题最长的非递减连续子序列的长度要连续的数字序列的最长的长度 直接看输入输出 输入 abc2234019A334bc 输出 4 解释:输入一个字符串,只包含字 ...
- 基于链表的两个非递减有序序列的合并(C++)
描述 给定两个非递减的整数序列A和B,利用链表表示序列A和B,将A和B合并为一个非递增的有序序列C,序列C允许有重复的数据.要求空间复杂度为O(1). 输入 多组数据,每组数据有三行,第一行为序列A和 ...
- 数据结构_Java_基于 线性表-单链表的初始化、逆序、去重、非递减序列的合并(开辟新链表先整体插入一个链表全部元素,再遍历另外一个链表寻找合适位置插入 、开辟新链表实现舍弃原链表)等操作实现
写在前面 不久前学习了数据结构线性表-数组-链表的相关知识,用C/C++语言实现了 单链表的系列相关操作 .见往期博客: 数据结构实验2_C语言_基于顺序表的非递减有序表的合并.线性表元素的增.删.改 ...
- LeetCode665:非递减序列(python)
题目: 一个长度为 n 的整数数组,在最多改变1个元素的情况下,该数组能否变成一个非递减数列: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= n ...
- 杭电5256 序列变换(LIS)
序列变换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
最新文章
- c# 经典521例(2)
- 注入(一):APC注入
- Azure Stack运维工具Azure Stack Tools的使用及实战
- matlab正余弦画心形图案
- .Net Core中的诊断日志DiagnosticSource讲解
- 使用通用mapper实现条件查询_使用dsum轻松搞定多条件查询,学会它,再也想用sumifs了...
- Object-C-NSFileManager
- php secket5,《Thinkphp5使用Socket服务》 入门篇
- 倍福PLC通过CANOpen通信控制伺服
- 基于单片机的电子密码锁设计
- 渗透测试 ( 1 ) --- 必备 工具、导航
- 调频连续波雷达(FMCW)测距/测速原理
- 蒂姆•库克在斯坦福毕业典礼上都讲了啥?
- part1-CST建模
- Loki 收集Nginx日志以 grafana 可视化展示
- python三维矩阵乘法_tensorflow 二维矩阵乘以三维矩阵,高维矩阵相乘
- Fedora 7安装和配置
- 微信小程序 JS中遍历后台获取的data数据并赋值
- 云队友丨王兴的无限游戏:很多人误认为干掉对手,就胜利结束
- 用python输入三个整数判断能否构成三角形_输入3个整数,判断是否能构成三角形,c语言编程...
热门文章
- free查看可用缓存
- Bad connect ack with firstBadLink 192.168.*.*:50010
- nhibernate入门系列: 使用Criteria载入对象
- 后盾网lavarel视频项目---lavarel中的tinker是什么
- 【清华集训2016】Alice和Bob又在玩游戏
- legend2---开发常用语句
- 解决SELinux导致Apache更改端口后无法启动的问题
- Django-Model操作数据库(增删改查、连表结构)参考
- 秋招 百度二轮面试---血淋淋的经历写实
- vue-cli启动本地服务,局域网下通过ip访问不到的原因