贪心推公式——AcWing 125. 耍杂技的牛

news2025/1/18 17:11:45

贪心推公式

定义

贪心算法是一种在每一步选择中都采取在当前状态下最优的选择,希望通过局部的最优选择来得到全局最优解的算法策略。

运用情况

  • 问题具有最优子结构,即一个问题的最优解包含其子问题的最优解。
  • 可以通过局部最优决策逐步推导到全局最优。
  • 问题的选择策略相对明确且易于计算。

注意事项

  • 贪心算法并不总是能得到全局最优解,可能会陷入局部最优。
  • 对于一些复杂问题,需要谨慎验证其正确性。
  • 可能需要对问题进行深入分析和特殊处理,以确保贪心策略的有效性。

解题思路

  • 明确问题的目标和约束条件。
  • 找出每一步的局部最优选择策略。
  • 按照贪心策略逐步进行选择和计算。
  • 验证最终结果是否符合预期,必要时进行调整或证明其正确性。

AcWing 125. 耍杂技的牛

题目描述

AcWing 125. 耍杂技的牛 - AcWing

运行代码

#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
const int N = 50010;
int n;
PII cow[N];
int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i ++ )
    {
        int s, w;
        scanf("%d%d", &w, &s);
        cow[i] = {w + s, w};
    }
    sort(cow, cow + n);
    int res = -2e9, sum = 0;
    for (int i = 0; i < n; i ++ )
    {
        int s = cow[i].first - cow[i].second, w = cow[i].second;
        res = max(res, sum - s);
        sum += w;
    }
    printf("%d\n", res);
    return 0;
}

代码思路

  • 定义了一个 PII 类型来表示奶牛的信息(重量和强度之和以及重量)。
  • 读取每头奶牛的重量和强度,计算并存储相关信息到数组 cow 中。
  • 对 cow 数组按第一维(重量和强度之和)进行排序。
  • 通过遍历计算每一步的风险值(当前总重量减去当前奶牛的强度),并更新最大风险值的最小值。

改进思路

  • 错误处理:可以添加一些输入错误检查,例如检查输入的 n 是否合理,以及输入的重量和强度值是否符合要求。
  • 内存优化:如果可能的话,可以考虑动态分配 cow 数组,以避免在不需要处理大量数据时浪费固定的较大内存空间。
  • 代码结构优化:可以将数据读取、处理和输出的部分进一步划分清晰,提高代码的组织性。
  • 性能微优化:虽然当前的排序和计算逻辑已经较为高效,但可以研究是否有更适合特定场景的优化方法。
  • 使用 C++ 输入输出流:如前面提到的,可以将 scanf 和 printf 替换为 cin 和 cout,使代码风格更一致和现代。

改进代码

#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
const int N = 50010;

int n;
PII cow[N];

int main() {
    scanf("%d", &n);

    for (int i = 0; i < n; i++) {
        int s, w;
        scanf("%d%d", &w, &s);
        cow[i] = make_pair(w + s, w);
    }

    sort(cow, cow + n, [](const PII& a, const PII& b) {
        return a.first < b.first || (a.first == b.first && a.second < b.second);
    });

    int res = -2e9, sum = 0;

    for (int i = 0; i < n; i++) {
        int s = cow[i].first - cow[i].second, w = cow[i].second;
        res = max(res, sum - s);
        sum += w;
    }

    printf("%d\n", res);

    return 0;
}

代码思路

  • 首先定义了一些常量和数据结构,包括表示奶牛信息的 PII 以及数组 cow
  • 在 main 函数中,通过 scanf 读取奶牛的数量 n 。
  • 接着循环读取每头奶牛的重量 w 和强度 s,并将它们的和与重量组成 PII 存入 cow 数组。
  • 使用自定义的比较函数对 cow 数组进行排序,优先按和的大小排序,和相同时按重量大小排序。
  • 初始化结果 res 为一个极小值,以及总重量 sum 为 0 。
  • 然后通过遍历排序后的数组,计算每一步的风险值(当前总重量减去当前奶牛的强度),并与当前的最大风险值比较更新,同时更新总重量。
  • 最后将计算得到的最大风险值的最小值输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1853187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

带百分比的进度条控件(ProgressBar)源码

带百分比的进度条控件&#xff08;ProgressBar&#xff09;&#xff1a; 源码下载地址&#xff1a;https://download.csdn.net/download/wgxds/89472915

48-5 内网渗透 - JuicyPotato、Pipe Potato提权

Juicy Potato Juicy Potato 与 Rotten Potato(烂土豆) 的原理几乎完全相同,只是在后者的基础上做了扩展,以便更灵活地利用 Rotten Potato。Juicy Potato 不再像 Rotten Potato 那样依赖于一个现有的 Meterpreter,并且可以自定义 COM 对象加载的端口,以及根据系统版本更换…

【AWS SMB 能力最佳实践】利用 MGN 解决方案实现跨AWS账号迁移Amazon EC2 实例、弹性IP地址等资源

文章目录 一、实验情景二、实验关键服务概述2.1 MGN解决方案2.2 VPC对等连接 三、实验架构示意图四、实验具体操作步骤4.0 创建访问密钥4.1 创建VPC资源4.1.1 在源账号上创建VPC4.1.2 在目标账号上创建VPC 4.2 创建对等连接✨4.2.1 发起对等连接请求4.2.2 接受对等连接请求4.2.…

vue上传文件拿到File,下载文件到本地

vue中使用upload组件上传pdf文件&#xff0c;拿到File内容后&#xff0c;下载pdf文件到本地vue中根据url下载pdf文件到本地 File文件内容的格式 注意&#xff1a;如果使用iview的upload组件上&#xff0c;要获取File文件&#xff0c;需要在before-upload钩子上获取 async down…

分治精炼宝库----归并排序应用( ´◔︎ ‸◔︎`)

目录 一.基本概念: 二.归并排序&#xff1a; 三.交易逆序对总数&#xff1a; 四.计算右侧小于当前元素的个数&#xff1a; 五.翻转对&#xff1a; 六.合并k个有序链表&#xff1a; 一.基本概念: &#x1f43b;在计算机科学中&#xff0c;分治法是一种很重要的算法。字面上的…

深入理解数据仓库建模——数据湖、数仓一体化

引言 在当今数据驱动的时代&#xff0c;数据仓库和数据湖的结合已经成为企业数据管理的关键。本文将深入探讨数据湖与数据仓库一体化的概念、优势以及实现方法&#xff0c;并结合实际案例&#xff0c;为大家展示如何有效地实现这一目标。 数据湖与数据仓库的区别 数据湖和数…

服务器数据恢复—raid5热备盘同步失败导致阵列崩溃如何恢复数据?

服务器存储数据恢复环境&故障&#xff1a; 某品牌DS5300存储&#xff0c;包含一个存储机头和多个磁盘柜&#xff0c;组建了多组RAID5磁盘阵列。 某个磁盘柜中的一组RAID5阵列由15块数据盘和1块热备硬盘组建。该磁盘柜中的某块硬盘离线&#xff0c;热备盘自动替换并开始同步…

基于YOLOv5+pyqt5的口罩佩戴检测系统(PyQT页面+YOLOv5模型+数据集)

简介 在各种工作环境和公共场所,确保人们正确佩戴口罩对个人防护和公共卫生至关重要,尤其是在医疗设施、制造业车间和拥挤的公共交通中。为了满足这一需求,我们开发了一种基于YOLOv5目标检测模型的口罩佩戴检测系统。本项目不仅实现了高精度的口罩佩戴检测,还设计了一个可…

STM32上实现spwm调制原理分析

在STM32微控制器上实现SPWM&#xff08;正弦脉宽调制&#xff0c;Sinusoidal Pulse Width Modulation&#xff09;调制的核心是利用高频载波&#xff08;三角波&#xff09;与低频基波&#xff08;正弦波&#xff09;作比较得出。 那么在STM32里三角波和正弦波分别是什么&…

在React中,如何利用React.memo函数对函数组件进行优化?

React.memo 是 React 的一个高阶组件&#xff0c;用于对函数组件进行性能优化。它通过记忆化&#xff08;memoization&#xff09;来避免不必要的重新渲染。当组件的 props 没有变化时&#xff0c;React.memo 可以防止组件重新渲染&#xff0c;从而提高应用的性能。 使用 Reac…

DVWA 靶场 SQL Injection (Blind) 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

VSCode 安装Remote-SSH

1、打开扩展商店安装Remote-SSH 快捷键&#xff1a;CtrlShiftX 2、配置ssh连接 打开命令面板&#xff08;CtrlShiftP&#xff09; 输入"Remote-SSH: Connect to Host"并选择。 输入你的Ubuntu服务器的IP地址或主机名。 3、连接到ubuntu服务器 如果是第一次连接&…

GPTCache:革新大模型缓存,降低成本,提升效率

GPTCache介绍 随着应用程序越来越受欢迎并遇到更高的流量水平,与 LLM API 调用相关的费用可能会变得相当可观。此外,LLM 服务的响应时间可能会很慢,尤其是在处理大量请求时。GPTCache是一个致力于构建用于存储 LLM 响应的语义缓存的项目。 项目架构 数字人助力传统客服 1…

Inpaint软件最新版下载【安装详细图文教程】

​根据使用者情况表明在今天的数字时代&#xff0c;我们经常会遇到需要处理图形的情况&#xff0c;然而&#xff0c;当我们遇到水印在图形上&#xff0c;我们就需要寻找一个有效的方式来去除它&#xff0c;Inpaint软件就是一个非常实用的工具&#xff0c;它能够帮助我们去除水印…

数据结构小知识2:树

一、什么是树 数据结构中的树是一种非常重要的非线性数据结构。它由节点&#xff08;Node&#xff09;和边&#xff08;Edge&#xff09;组成&#xff0c;用于表示具有层次关系的数据。 1.1、树的基本概念 节点&#xff08;Node&#xff09;&#xff1a; 树的基本单位&…

修改yarn、npm、pnpm为国内镜像源

国内由于网络的原因&#xff0c;使用官方的npm、yarn、pnpm访问下载依赖库会很慢&#xff0c;有时候还会出现无法访问的情况&#xff0c;这时候就需要我们给npm、yarn、pnpm换一个国内的镜像源的&#xff0c;一般的我们可以将镜像换成淘宝的源&#xff0c;由于平时比较常用到的…

《珊瑚岛》是一款什么类型的游戏 苹果电脑如何玩到《珊瑚岛》

在众多电子游戏中&#xff0c;有些游戏因其独特的游戏体验和丰富的内容而脱颖而出&#xff0c;《珊瑚岛》便是其中之一。在游戏中你将离开宝京前往珊瑚岛&#xff0c;种植农作物、饲养动物、和岛民成为朋友。您不仅可以振兴该岛小镇&#xff0c;还可以保护和修复周围的珊瑚礁。…

Part 8.2 最短路问题

很多题目都可以转化为最短路的模型。因此&#xff0c;掌握最短路算法非常重要。 >最短路模板< 【模板】全源最短路&#xff08;Johnson&#xff09; 题目描述 给定一个包含 n n n 个结点和 m m m 条带权边的有向图&#xff0c;求所有点对间的最短路径长度&#xff…

流水账里的贷款密码:如何打造银行眼中的“好流水”

说到贷款&#xff0c;很多人可能都遇到过这样的困惑&#xff1a;明明觉得自己条件不错&#xff0c;为啥银行就是不给批呢&#xff1f;其实&#xff0c;银行在审批贷款时&#xff0c;除了看你的征信记录、收入证明这些基础材料外&#xff0c;还有一个很重要的参考指标&#xff0…

LinkedHashMap详解

目录 LinkedHashMap详解1、LinkedHashMap的继承体系2、LinkedHashMap的特性介绍和代码示例①、特性②、适用场景使用LinkedHashMap 实现最简单的 LRU缓存 3、LinkedHashMap的构造函数4、LinkedHashMap是如何存储元素的&#xff0c;底层数据结构是什么&#xff1f;LinkedHashMap…