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

贪心笔记

时间:2023-08-30 15:11:09浏览次数:38  
标签:frac sum 交换 笔记 times ans prod 贪心

本文主要以例题讲解和贪心方法入手。

邻项交换

当我们确定操作顺序,并按照题意模拟即可得出答案,就要用邻项交换的办法来确定最优的操作顺序。

接水问题

对于一个排队顺序 \(T_1\sim T_n\),答案显然等于:

\[\frac{\sum_{i=1}^{n}{(n-i)\times T_i}}{n} \]

那么将其中的 \(T_2,T_3\) 拎出来,将他们交换位置,显然不会影响后面的 \(T\) 的计算,而:

\[(n-1)\times T_2+(n-2)\times T_3 \]

变成了:

\[(n-2)\times T_2+(n-1)\times T_3 \]

那么如果想让交换前的更优,显然需要满足:

\[(n-1)\times T_2+(n-2)\times T_3 < (n-2)\times T_2+(n-1)\times T_3 \]

即:

\[T_2<T_3 \]

所以我们要按照 \(T\) 从小到大的顺序进行排序。这样就能取得最优值。


[NOIP2012 提高组] 国王游戏

同样,将排队顺序写出来后,即可按照题意模拟,将答案算出。

直接考虑第 \(i\) 个人的贡献:\(\frac{\prod_{j=1}^{i-1}\;l_j}{r_i}\),第 \(i+1\) 个人的贡献显然是 \(\frac{\prod_{j=1}^{i}\;l_j}{r_{i+1}}\),那么交换后,变成 \(\frac{l_{i+1}\; \times \prod_{j=1}^{i-1}\;l_j}{r_i}\) 和 \(\frac{\prod_{j=1}^{i-1}\;l_j}{r_{i+1}}\),要想交换前更优,显然应该满足:

\[\max\{\frac{\prod_{j=1}^{i-1}\;l_j}{r_i},\frac{\prod_{j=1}^{i}\;l_j}{r_{i+1}}\}<\max\{\frac{l_{i+1}\times \prod_{j=1}^{i-1}\;l_j}{r_i},\frac{\prod_{j=1}^{i-1}\;l_j}{r_{i+1}}\} \]

可以转化为比较:

\[\frac{\prod_{j=1}^{i}\;l_j}{r_{i+1}}<\frac{l_{i+1}\times \prod_{j=1}^{i-1}\;l_j}{r_i} \]

即:

\[\frac{l_i}{r_{i+1}}<\frac{l_{i+1}}{r_i} \]

即:

\[l_i\times r_i<l_{i+1}\times r_{i+1} \]

按照这个式子排序即可。


[yLOI2019] 梅深不见冬

先对问题进行简单的分析,如果我们将节点 \(k\) 的子儿子答案全部计算出来(记作 \(ans_i\),并设权值为 \(v_i\)),并且将进入儿子的顺序确定下来,那么答案就是:

\[\max\{v_k+v_1+v_2+...+v_{siz(son)},ans_1,v_1+ans_2,v_k+v_1+v_2+ans_3...\} \]

同样,我们取其中的两个 \(v_k+\sum_{j=1}^{i-1}v_j+ans_i\) 和 \(v_k+\sum_{j=1}^{i}v_j+ans_{i+1}\),交换后:\(v_k+\sum_{j=1}^{i-1}v_j+ans_{i+1}\) 和 \(v_k+\sum_{j=1}^{i-1}v_j+ans_i+v_{i+1}\),那么我们只需要比较:

\[v_k+\sum_{j=1}^{i}v_j+ans_{i+1}<v_k+\sum_{j=1}^{i-1}v_j+ans_i+v_{i+1} \]

即可,就是满足:

\[v_i-ans_i<v_{i+1}-ans_{i+1} \]

处理所有节点时,按照这个排序即可。

标签:frac,sum,交换,笔记,times,ans,prod,贪心
From: https://www.cnblogs.com/zhangyuzhe/p/17666341.html

相关文章

  • 系统集成项目管理工程师-笔记整理
    项目管理 项目立项-项目可行性研究1.项目建议书应包括的核心内容1)项目的必要性2)项目的市场预测3)产品方案和服务的市场预测4)项目建设的必要条件项目的风险预测及应对措施 属于项目启动后的风险管理1.     项目可行性研究内容 详细到每个1)投资的必要性2)技术的可行性......
  • 1-JAVA-面向对象程序设计概论-笔记整理
    学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人JAVA-面向对象程序设计概论-笔记整理内容提要结构化程序设计方法面向对象技术及UML简介面向对象基本概念面......
  • linux命令学习笔记
    sudo+命令:以超级用户模式执行命令sudo-i:切换到超级用户模式,exit退出cd+路径:切换目录ls:当前路径文件列表ls+路径:指定路径文件列表mkdir+名称:新建文件夹chmod[-R]权限值文件名:修改权限(http://c.biancheng.net/view/755.html)tar-cfa.tarbc:把b和c打包成a.tarta......
  • 软件测试学习笔记
    黑马程序员学习路线。最多的还是点点点,但是要了解。 给你一个前端包,会不会放在linux服务器上?给一个后端包,会不会放在Linux服务器上?连数据库。服务器。脚踏实地。一步一步做。去年十一,分了项目做。培训机构,从早到晚做的就是一件事情。多做熟悉。      sel......
  • STM32学习笔记:分散加载
    分散加载是提高单片机上限的一个非常重要的能力。以STM32H7为例,H7的RAM为:512KbytesofAXI-SRAMmappedontoAXIbusonD1domain,SRAM1mappedonD2domain:128Kbytes,SRAM2mappedonD2domain:128Kbytes,SRAM3mappedonD2domain:32Kbytes,SRAM4mappedonD3dom......
  • java学习笔记之String类
    javaString类位置packagejava.lang;直接使用,无需导入常用方法length获取字符串长度示例:Strings1="abc";System.out.println("字符串的长度为:"+s1.length());>>>字符串的长度为:3isEmpty字符串是否为空字符串示例:Strings1="abc";System.out.println......
  • 【Python】报错处理笔记
    shutil.rmtree(path)报错:PermissionError:[WinError5]分析:对应的目录或文件被设置了只读属性解决方案:defremove_readonly(func,path,_):#错误回调函数,改变只读属性位,重新删除"Clearthereadonlybitandreattempttheremoval"os.chmod(path,stat.S_I......
  • nodejs一些学习笔记记录
    模块一个文件就是一个模块引入模块Node.js提供了exports和require两个对象,其中exports是模块公开的接口,require用于从外部获取一个模块的接口,即所获取模块的exports对象。varhello=require('./hello');模块编写的形式常规写法exports.world=function(){......
  • cento 申请ssl证书笔记
    如果您的Certbot工具没有内置的Nginx插件,您可以尝试以下方法来申请证书并配置Nginx服务器:安装Certbot的Nginx插件:sudoyuminstallcertbot-nginx这将安装适用于Nginx的Certbot插件。执行Certbot命令来申请证书并配置Nginx服务器:sudocertbot--nginx-dwxapi.hunji.xy......
  • guotianxiang_arm笔记
    第四讲:1)裸机程序(.bin文件)烧入NOR-FLASH中,并选择从NORFLASH启动。2)使用H-JTAG烧写裸机程序:先加载.hfc配置文件,识别FLASH;再烧写bin文件。3)u-boot.bin下载:DNW软件,下载到NAND-FLASH。通过USB口,提前装好USB驱动。4)在uboot启动后,整板测试程序可直接下载到SDRAM中运行,使用DNW软件。5)在......