首页 > 其他分享 >贪心学习笔记

贪心学习笔记

时间:2024-03-25 13:59:09浏览次数:32  
标签:kC mB nA S1 笔记 学习 字符串 贪心

读前声明:作者markdown和文笔一样差

制作不易,给个赞吧~

贪心,和其他算法。。。不对,贪心其实是一种思想。

虽然但是为什么大家都叫他算法啊(

贪心和大部分算法不一样,他要证明!

证明这种方法是对的!

我好讨厌证明啊啊啊,但是必须要啊啊啊啊

不证明?WA慢走不谢!如臭名昭著的石子合并,看着贪心,其实是个DP

咋证明?可以用反证法、构造法、调整法和其他一堆,但是还是这三个常用。

其中反证法和调整法又最常用。

一个个来。

反证法

思路就是用贪心的策略,依次构造出一个解 \(S1\),假设最优解 \(S2\) 不同于 \(S1\),可以证明是矛盾的,从而得出 \(S1\) 就是最优解。

例题:

最大整数

【问题描述】

设有 \(n\)(\(n\)≤20)个正整数(小于或等于 \(2147483647\)),将它们连接成一排,组成一个最大的多位整数。例如 \(n\)=\(3\),\(3\) 个整数为 \(13\)、\(312\) 和 \(343\),连接成的最大整数为 \(34331213\)。

【输入格式】

第 1 行 1 个整数 \(n\)。

第 2 行为 \(n\) 个正整数,每两个数之间用一个空格隔开。

【输出格式】

一行一个数,表示连接成的最大整数。

【输入样例】

4

7 13 4 246

【输出样例】

7424613

思路

首先想到大的字符串在前。

因为一般情况下 \(a>b\)(\(a\),\(b\) 都是字符串),那么 \(a+b>b+a\)

但是!比如

\[a=121,b=12 \]

\[a+b=12112 \]

\[b+a=12121 \]

明显 \(a+b<b+a\)

那咋办?

欸你看到我几次提到 \(a+b,b+a\) 了吗?

那我们可以用 \(a+b\) 和 \(b+a\) 比较啊!

苏!

到了证明!

引理:

记 \(nA\) 为 \(n\) 个字符串 \(A\) 按字符串加法运算规则相加之和,则由 \(A+B≥B+A\) 可推导出 \(nA+mB≥mB+nA\),其中 \(m\),\(n\) 为任意的自然数。用反证法可证明反过来也成立。


所以,设 \(la\) 为字符串 \(A\) 的长度,\(lb\) 为字符串 \(B\) 的长度,\(lc\) 为字符串 \(C\) 的长度,再设 \(n=lb*lc\),\(m=la*lc\),\(k=la*lb\),则 \(nA\),\(mB\),\(kC\) 三 个 字 符 串 等 长,根 据 引 理 有:\(nA+mB≥mB+nA\),\(mB+kC≥kC+mB\),从而得到 \(nA≥mB≥kC\),所以 \(nA+kC≥kC+nA\),\(A+C≥C+A\)。

所以,要使 \(n\) 个字符串拼接起来后得到一个最大的字符串和式,则一定要将按上述定义最大的字符串放在第一个,否则必可通过将最大的字符串与它左侧的字符串交换得到更大的字符串和式。

调整法

就是用贪心的策略,依次构造出一个解 \(S1\)。假设最优解 \(S2\) 不同于 \(S1\),找出不同之处,在不破坏最优性的前提下,逐步调整 \(S2\),最终使其变为 \(S1\),从而 \(S1\) 也是最优解。

没错这很生涩,还是来道题!

没错!这道题和大湾区T3很像!

例题:

问题描述:
一天,晨晨发现自己的 \(n\)(\(2<=n<=100\))只兔子跑到自己的花园里面,它们在尽情的吃着她的宝贝花卉。晨晨看在眼里痛在心里,她现在只能把兔子逐个的抓回笼子里面。而送每只兔子回去的时间都不同,例如送第 \(i\) 只兔子回去需要 \(ti\)(\(1<=ti<=100\))单位时间,那么晨晨送第 \(i\) 只兔子总共需要花费 \(2*ti\) 单位时间,另外每一只兔子单位时间的破坏力都不同,例如第 \(i\) 只兔子单位时间内破坏 \(di\)(\(1<=di<=100\))朵花。

现在的问题是,晨晨如何安排送这 \(n\) 只兔子回笼子才能使这些兔子的破坏最小。

输入格式:
第一行:一个整数 \(n\)(\(1<=n<=100\));

接着有 \(n\) 行,每行两个空格分开的整数 \(ti,di\),分别代表每一只兔子的送回去的时间,和单位时间破坏力。

输出格式:

一行:一个整数,代表这些兔子破坏多少花卉。

输入样例:

6 
3 1 
2 5 
2 3 
3 2 
4 1 
1 6 

输出样例:

86 

思路

水题。

排个序。

sort

重点在cmp函数!

首先不管是只对 \(ti\) 还是只对 \(di\) 排序都会被无情的

H A C K

那怎么办?

我们cmp对橙色兔子和蓝色兔子排序,红色部分不管。

记得当时讲大湾区T3时,著名用户@TallBanana 问我为什么红色不管。

左边在你后边,不关你事;

右边在你前面,不管你在前在后都要吃那堆花。

那比较谁在前吃的少不就好了?


但是只会这些,你还是太弱乐!

一些难题

蜈蚣

贪心最多倒霉到什么程度。

有点坑,要把所有凑不齐一双的拿了,然后坑害强迫症把每一种袜子都拿一双少一个,最后把少的那个拿了。

[JSOI2007]建筑抢修

贪心好助手——优先队列

点开链接是我写的优先队列学习笔记。

潜水比赛

sort完处理,有点难想。

鞋盒(box)

和蜈蚣差不多。


后记

贪心很实用。

不管是OI还是现实,第一直觉就是贪心。

虽然石子合并是DP,你在第一直觉不就是贪心?

谁会先推DP啊。

我的易错点

喜欢用cincout。

你好TLE。

想错。

我太弱了,总是想错(应该要列草稿才行吧)。

不证明。

我很懒,不证明,所以老是白费时间写错误代码。

想复杂。

一道sort+cmp我能写出猪国杀还长的代码。

学习贪心+写贪心题的感受

累人。

种类太多了。

学习贪心听课就行,很简单;

写题。。。额。。。噩梦啊。。。

就是要多想贪心方法,然后证明他,然后写的简单一点。

虽然但是这不应该很简单嘛。

但就是很难。

我觉得在于多练。

写给未来的自己:

给 我 多 刷 贪 心 题 !

多练,熟能生巧。

彩蛋

没错还是我们的@TallBanana

他说:“所有算法都是贪心!”

我:“??????”

他:“为了贪心的拿到更多分,所以使用这些算法!”

我:“IEE”

一些不方便在正文说的东西

Q:为什么我的题不按照什么“最值”什么的分?

A:我不是很认同这么分题目。

这样会锁住你的思维,看到题后不是先想怎么做,而是先想是什么类型,才想怎么做。

而且同一个类型题目千变万化。

Q:为什么最后“一些难题”那里很少?

A:学校网站的题。

写在最后

贪心真的又难又简单。

需要很多练习才可能掌握。

啊啊啊为什么我那么弱,贪心都不会啊啊啊!!!

加油吧,OIer!

标签:kC,mB,nA,S1,笔记,学习,字符串,贪心
From: https://www.cnblogs.com/cppom/p/-/mynameisheshen

相关文章

  • 换根DP学习笔记
    啊啊啊啊啊啊啊啊啊啊啊啊画图累死我了额,这不菜根快乐DP(根)吗换根DP,即换根树形DP平常树形DP指定一个根,但万一邪恶出题人让你求多个点为根的情况呢?你们可能会想:多跑几遍不就好了!不可以的,直接TLE。这有个树,B是A之后的树根(拎上去):B成为树根后:画风突然转变但是!其实有些没变!......
  • 高斯消元学习笔记
    注:此篇一直在讲高斯-约旦消元法。https://oi-wiki.org/math/numerical/gauss/相信大家都读过上面那个wiki。大家其实都看得挺懵的对吧。今天我就来教一下大家高斯消元。技术指导:milk,周百万,TB\(\LaTeX\)指导:不是你觉得这文章\(\LaTeX\)很好吗?所以没有指导。首先小学知识......
  • 容斥原理学习笔记
    一个很重要的东西首先为了方便我们规定\[0^0=1\]也就是说\[0^n=\left[n=0\right]\]你们可能会说:“啊火神这个\([]\)是啥啊?”\[[P]称为Iverson括号,P是一个命题,若P为真则[P]=1,否则[P]=0。\]OIer话:类似bool。这个规定超级有用,有用在哪你们待会就知道了。朴素集合论“......
  • 多媒体笔记
    人类感知信息的途径:视觉占65%,听觉占20%,嗅觉、味觉、触觉占15%信息量。 3D视频比2D视频多了深度一维。 视频图像压缩的基本依据:1)空间冗余;2)频率冗余;3)视觉冗余;4)熵冗余;5)时间冗余。 视频图像压缩的基本方法:1)帧内预测编码;2)变换编码;3)量化编码;4)熵编码;5)帧间预测编码。 ......
  • 矩阵乘法学习笔记
    还是那句话,作者\(\LaTeX\)超级差。定义首先矩阵定义扔出来:域\(K\)上的一个\(n×m\)的矩阵可以看作一个\(n×m\)的数表。记为:\[A_{n×m}=\begin{bmatrix}A_{1,1}&\cdots&A_{1,m}\\\vdots&\ddots&\vdots\\A_{n,1}&\cdots&A_{n,m}\end{bmatrix}\]矩阵加法soeasy.......
  • 嵌入式学习开发第一章
    嵌入式开发入门:第一章Linux操作系统Linux操作系统的安装与常见命令的使用文章目录嵌入式开发入门:第一章Linux操作系统Linux操作系统的安装与常见命令的使用前言一、嵌入式系统是什么?二、Linux操作系统的安装(Ubuntu)1下载所需资源1-1下载虚拟机1-2下载ubuntu镜像文件......
  • 深度学习 - PyTorch基本流程 (代码)
    直接上代码importtorchimportmatplotlib.pyplotaspltfromtorchimportnn#创建dataprint("****CreateData****")weight=0.3bias=0.9X=torch.arange(0,1,0.01).unsqueeze(dim=1)y=weight*X+biasprint(f"NumberofXsamples:{len......
  • 莫队学习笔记
    模板。然后我不会做。然后我去看题解,看莫队学习笔记,看不懂。然后我摆烂了。然后去玩按住shift让光标左右动的无聊游戏。我最开始选中了标红点的部分。多选中了左边的一个点,少选中了右边的一个点。然后我会莫队了?......
  • 深度学习(18)--注意力机制详解
    目录一.什么是注意力机制(AttentionMechanism)二.什么是注意力(Attention)三.自注意力机制(Self-AttentionMechanism)3.1.对输入数据进行Embedding操作3.2.q,k操作3.3.v操作 3.4.代码实现四.多头自注意力机制(Multi-headSelf-AttentionMachanism) 4.1.q,k操作4.2.v......
  • 吴恩达机器学习笔记第六章逻辑回归分析以及代码实现
    第六章对线性代数和导数的要求比之前几章是要高一些的,对于对应的数学知识点我会在下方顺便仔细地指出来并在能力范围内给予一定的推导,尽量保证各位能明白不用再查来查去的,不用重蹈我的覆辙......