首页 > 其他分享 >[题目记录]一本通高手训练-塔

[题目记录]一本通高手训练-塔

时间:2024-12-03 15:32:09浏览次数:6  
标签:高手 le 题目 可以 位置 一本 次数 单调 贪心

题意

有 \(n\) 个数 , 每次可以合并相邻两个数为一个数 , 新的数的值是原来两个数的和 .

求最小操作次数 , 使得序列变为不降序列 .

\(case 1: n \le 3000\)

\(case 2: n \le 1e5\)


题解

做法一

一本通上给到的一种做法 .

首先设计状态 \(f_{i,j}\) 当前位置 \(i\) , 上一次转移位置 \(j\) , 存最小操作次数 . 直接更新 :

\[f_{i,j}=\max f_{j,k} \]

其中要满足 \(i\) 到 \(j+1\) 的和不小于 \(k+1\) 到 \(j\) 的 .

显然所有可以取的 \(k\) 是一个后缀 , 因此直接记录后缀 \(\max\) , 就可以实现 \(O(1)\) 单次转移 . 可以用二分找到 \(k\) 的位置 .

不过 , 因为在 \(j\) 增大的过程中 , \(k\) 的位置相应地不减 , 所以可以用指针扫一遍 ,总复杂度 $O(n^2) $.

做法二

从刚才的做法可以得到一个观察 , 即在 \(j\) 尽量大且满足有方案的时候 , 由 \(j\) 向后贡献总是最优的.

具体地 :

对于有方案的所有 \(f_{i,j}\) , 最大的 \(j\) 向后更新的次数总比前面的多 . 这一点可以由刚才的单调性证明 .

因为最少操作次数相当于更多的转移次数 , 通过归纳法可以发现最大的 \(j\) 总有最小的操作次数 .

这一点其实可以直接观察得到 . 这样就得到了一个很强的 , 贪心性质的结论 .

这启发我们通过 dp 只计算到每一个位置最大的末尾数字 , 每次更新尽量取最大的 \(j\) , 满足 \(\sum^{i}_{k=j+1} \le f_j\) .

可以通过平衡树或线段树维护贪心过程 , 复杂度 \(O(n\log n)\) .


总结

题目本身并不难 . 找性质的过程还是很容易的 , 不管是通过观察直接 dp 的更新过程 , 还是直接模拟过程找规律 , 都能体会到一种很强的 **" 单调性结论 " ** .

具有单调性的问题常常可以从单调的角度 , 之抓住对结果最有用的部分 , 优化掉没有必要考虑的部分 , 比如单调栈 , 单调队列 . 更广义地看 , 例如在笛卡尔树上 , 这种方法在贪心 , 以及找性质都有一种体现 . 找性质时明确自己的目的 , 也许对于快速发现性质是有用的 .

标签:高手,le,题目,可以,位置,一本,次数,单调,贪心
From: https://www.cnblogs.com/youlv/p/18584224

相关文章

  • [题目记录]一本通高手训练-交换
    题意定义操作如下:用\(0\cdotsn-1\)的一个排列\({q_n}\)交换排列\({s_n}\):对\(s_i\)中的元素进行\(n-1\)次两两交换,第\(i\)次交换\(s_{q_i}\)和\(s_{q_{i+1}}\).当\(s_i=i\)时,求排列\(q_n\)的个数,使得用\(q_n\)交换\(s_n\)得到给定的排列......
  • 使用服务器docker搭建Pwn题目
    一、docker的安装1、安装前先卸载操作系统默认安装的dockersudoapt-getremovedockerdocker-enginedocker.iocontainerdrunc2、安装必要支持sudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-commongnupglsb-release3、添加gpgKEY(阿......
  • 这个是哪个题目 spj 来着
    有一个数列\(a_1\sima_n\),如果存在\(l\simr\)使得\(2\midr-l+1\)而且\(a_{l+x}=a_{l+\frac{r-l+1}{2}+x}(0\lex\le\frac{r-l+1}{2})\)(即一个字符串连续出现两次),则\(a\)是平凡的。求问一个数列是不是平凡的。首先如果有相邻相同的,一定是平凡的。而且,一定第一位是相......
  • 长期主义下的一本经济账:卷价格更要卷性能
    「 不做陪跑者,要做支撑者。企业成长的每个关键时刻,在背后默默发力。」 今年以来,云的价格战似乎更猛烈了一些。事实上,云服务降价在规模与创新两重推动力下早就是一种常态。作为云的鼻祖,亚马逊云经常是一年连续降价十几次甚至几十次。这种理性降价,是将规模红利与创新红利释放给......
  • C++三级抽测题目(答案+题目)2
    今天我给大家出一套C++三级考题限时3小时,大家加油!!!题目1:求一个两位数的个位和十位的和说明从键盘读入一个两位的整数n,请求出这个两位整数个位和十位的和是多少?输入格式一个两位的整数n。输出格式一个整数,代表n个位和十位的和。样例输入数据124输出数据16......
  • 博主自留二叉树万字长文—>涵盖名词辨析 + 树的两种表示方法 + 所有特殊二叉树 + 图解
    玩转二叉树(概念+图解+例题代码详解)一、树的概念我们知道在计算机什么是树吗?是二月春风似剪刀吗?哈哈哈哈哈哈显然不是我们看下面这张图,可以观察到树的一些特征1、树的特征(1)树是非线性的数据结构,是递归定义的(连通性)(2)子树之间不能有任何交集(无环性)(3)一颗N......
  • C题目:文件
    题目:从键盘输入一些字符,并逐个把它们送到磁盘上去,直到用户输入一个“#”为止。代码:#include<stdio.h>#include<stdlib.h>voidfile1(){FILE*fp;charch,filename[10];printf("请输入文件名:");scanf("%s",filename);getchar();if((fp=fop......
  • 今年最新最值得选的微信小程序毕业设计选题大全新颖的毕设题目(建议收藏!)
    文章目录前言微信小程序毕业设计题目选题大全为什么选择我更多毕设系统作品演示视频可看这里数据库+源码获取前言......
  • React高阶面试题目(六)
    React的formik库定义:Formik是一个用于在React应用程序中构建和处理表单数据的流行开源库。它提供了许多实用的组件和函数,使在React应用程序中处理表单数据变得更加轻松。优点:自动处理表单状态管理,无需手动编写大量的状态管理逻辑。提供了易于使用的表单验证工具,可以快......
  • [ctf]跟着风二西复现NSSCTF流量题目
    题目参考博客https://blog.csdn.net/zerorzeror/article/details/135737476?spm=1001.2014.3001.550220241130 [GKCTF2021]签到解题过程可以看到流量并不多,看到GET和POST里面有tmpshell 然后追踪HTTP流  可以看到初始的这一段字符,因为字符中字母最大的为f,无其他字......