首页 > 其他 > 详细

关于序列变化问题的总结

时间:2019-09-21 10:29:23      阅读:84      评论:0      收藏:0      [点我收藏+]

类似于把原序列改成目标序列的问题 感觉这种思维题目 有必要总结一下qwq 而且总结一下思考问题的方式是有必要的 发现这些问题是有一定的通解的

下面的问题 感兴趣的可以找到出处 这里我只讨论思考问题的方式

首先 是一道思考题

技术分享图片

 

我们知道 目标序列就是 a,a+1,a+2,a+3,.....a+n/2,a+n/2-1,n+n/2-2....a ,题目所求为修改多少个数字 可以使得原序列满足这样的条件;

那么 先考虑一个问题 如果题目给定的序列 就是符合题意的序列 我们显然 将原序列 和 目标序列 做差之后发现 我们将会得到一个 新序列 而这个新序列 形式必然是 :m,m,...,m;

每个数字必定相同 那如果原序列只有一个数字不符合题意 那我们得到的 做差序列 也必定只有一个数字和其他数字不一样 那么只需要修改这个不同的数字的位置的数字即可;

换句话说 其余相同的数字个数是最多的 我们选择保留了下来这些位置  那么修改次数 显示是长度-这个最长的长度;

所以 我们 首先 对原序列和目标序列 做差 得到 做差数列 我们知道这个做差数列上 相同数字最多的位置无需修改 所以我们要找到这个最长的数列;

具体是为什么呢 你不妨先思考一下这个问题 我们开一个数组num 记录做差之后的值的出现的次数;

如果从原序列ai到目标序列bi 需要改变的数值t 那么对于在num数组中t的个数 就是我们没有必要改变的原序列的个数 那么对于每一个就是n-num[t] 我们只需要取min 那么就是找到最长的那个相同数字的长度;

为了避免出现负数的情况 我们考虑加上一个较大值;好好考虑一下我们思考问题的方式 试着运用这种思想 可能现在不是很熟练 我们再看一道例题;

序列变化: 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增。其中无论是修改前还是修改后,每个元素都必须是整数。求最小修改次数;

我们上一道题目并没有直接求出改变多少 而是求出了最多保留多少位置 我们试着运用这个思想 

首先 我们不妨自己构造一组 严格单调的序列 1,2,3,4,5....n;

我们尝试将原序列和这个构造出来的序列做差 那么我们得到一个新序列 记作{bn} 如果原序列单调 那么这个b序列一定是单调不下降的 而我们发现这些 非严格递增的位置我们是不需要修改的

所以我们保留下来b序列最长的不下降部分 那么答案就是序列长度-b序列的最长不下降子序列的长度;

我们看一个扩展 说白了都是一样的 模拟赛考了 写了个stl就可以了 题目将修改后仍然保证是正整数 这是唯一的不同之处;

我们依旧按照上面的方法 得到做差序列 我们发现如果出现 a[i]-i<0 的情况 一定要修改的 我们考虑将这些数字剔除 那么我们考虑剩下的部分 最少修改多少 那么我们就转化成了上一道题目

其实 也就是求出来b首项为非负整数的最长不下降子序列 然后用序列长度减去 和上一个问题其实上是一样的;

所以今天总结一下就是 说 对于一个序列变化成什么序列的问题 我们考虑将原序列和目标序列放在一起进行对比 而且将最少修改多少转化成最多保留多少位置进行求解问题;

应该是觉得这样问题的比较好切入的思路 遇到这样的问题 我们尝试思考 如果原序列直接满足要求 如果原序列 只有一个不满足 我们考虑这样的变化为让 由原来留下来的位置变成留下来多少

尝试几次 注意观察 我们就能分析出来这样的问题;

趁着这个 我分析一下昨天的模拟赛(爆零赛)?? 都出点原题可太水了  T1 不开freopen T3 开到ll 导致MLE 本着三百的心情交了 0/100/0 下次要算对空间 提前十分钟检查 就这样8 5555 

 

关于序列变化问题的总结

原文:https://www.cnblogs.com/Tyouchie/p/11561285.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!