贪心算法-IPO问题

1、题目描述
给你一个启动资金w,和一个最大项目次数k。
然后,有两个数组,一个cost[],里面记录了每个项目需要花费的资金。一个profit数组,里面记录了每个项目完成后可以获取的利润。然后请你计算出,给你一个初始资金w,和最大项目次数k的情况下,可以获取的最大利润。每次只能做一个项目,不能同时进行几个项目。
例如:初始资金10,k=3,cost[10,20,30,40],profit[10,20,30,40]
那么,初始资金只能够花费来进行第一个10的项目,其他项目买不起,然后,第一个项目做完,利润是10,现在手里有20,就可以进行第二个项目了,然后再累加利润,看看能不能再解锁新项目。注意,每个项目只能做一次。

2、思路解析

升级打怪思路,就是我来到新手村,我肯定是找自己能干的过的,并且对我能力值提升高的怪物来打
就是搞两个堆小根堆+大根堆
小根堆里放所有项目 按项目花费资金排序
大根堆里放所有当前资金能覆盖的项目,按利润排序
最后把大根堆弹出的项目的利润加在一起即为所得

代码实现

// 最多K个项目
// W是初始资金
// Profits[] Capital[] 一定等长
// 返回最终最大的资金
public static int findMaximizedCapital(int K, int W, int[] Profits, int[] Capital) {PriorityQueue<Program> minCostQ = new PriorityQueue<>(new MinCostComparator());PriorityQueue<Program> maxProfitQ = new PriorityQueue<>(new MaxProfitComparator());for (int i = 0; i < Profits.length; i++) {minCostQ.add(new Program(Profits[i], Capital[i]));}for (int i = 0; i < K; i++) {while (!minCostQ.isEmpty() && minCostQ.peek().c <= W) {maxProfitQ.add(minCostQ.poll());}//可能资本不足,造成现在还能做项目但是大根堆没有项目给你做了if (maxProfitQ.isEmpty()) {return W;}W += maxProfitQ.poll().p;}return W;
}public static class Program {public int p;public int c;public Program(int p, int c) {this.p = p;this.c = c;}
}public static class MinCostComparator implements Comparator<Program> {@Overridepublic int compare(Program o1, Program o2) {return o1.c - o2.c;}}
public static class MaxProfitComparator implements Comparator<Program> {@Overridepublic int compare(Program o1, Program o2) {return o2.p - o1.p;}
}

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

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

相关文章

编译原理简介

编译原理简介 编译原理的研究对于理解和设计编程语言、编译器和解释器都非常重要。它不仅可以提高程序的执行效率&#xff0c;还可以帮助开发人员更好地理解程序的运行机制。编译原理是计算机科学中的一个重要分支&#xff0c;研究的是编译器的设计和实现。对于从事编译器开发…

OpenGL之着色器

着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说&#xff0c;着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序&#xff0c;因为它们之间不能相互通信&#xff1b;它们之间唯一的沟通只有通过输入和…

【C++11保姆级教程】深入浅出异常说明符、异常操作符和lambda表达式

文章目录 前言一、异常说明符1.1异常说明符是什么&#xff1f;1.2异常说明符的格式1.3异常说明符的优势 二、异常操作符2.1异常操作符是什么&#xff1f;2.2异常操作符的使用2.3优势 二、Lambda表达式2.1Lambda表达式是什么&#xff1f;2.2各个部分的意义2.3示例代码2.4优势 总…

【SpringMVC】

SpringMVC技术与Servlet技术功能等同,均属于web层开发技术 优点&#xff1a;使用简单&#xff0c;开发快捷&#xff0c;灵活性强 入门&#xff1a; 依赖 <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactI…

开发模式-敏捷开发

1. 概述 随着软件开发技术的不断发展&#xff0c;现在出现了很多种不同的开发模式&#xff0c;其实敏捷开发已经成为现在很多企业开发应用程序都想要选择的开发方案&#xff0c;那么什么是敏捷开发呢&#xff1f; 1.1 四种开发模式 1.1.1 瀑布式开发 瀑布式开发是一种老旧的…

66种智能优化算法跑23个基准测试函数

目录 1、66种智能优化算法 2 、23个标准测试函数 3 、多种智能优化算法在CEC2005上对比 3.1、 多个算法对比 3.2 单个算法运行 1、66种智能优化算法 将66种智能优化算法在23个经典测试函数上进行对比&#xff0c;这些智能优化算法包括一些高性能算法&#xff0c;如…

软件测试/测试开发丨python 多态与super 学习笔记

本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/26828 python 多态与super 多态的概念 多态&#xff1a;Polymorphism 同名方法呈现多种行为 多态的表现 号 加法&#xff1a;数字 数字拼接&#xff1a;字符串 字符串合…

Spring基础与核心概念

Spring 是什么&#xff1f; 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃而庞大的社区&#xff0c;这就是它之所以能长久不衰的原因。Spring 支持广泛的应⽤场景&#xff0c;它可以让…

Android中级——PackageManagerService和Intent

PackageManagerService和Intent PackageManagerServiceIntent PackageManagerService PMS扫描已安装的apk&#xff0c;解析其AndroidManifest.xml获取App相关信息&#xff0c;如下是其构造函数的相关片段 ...... if (partition.getPrivAppFolder() ! null) { //扫描系统应用…

大数据Doris(一):Doris概述篇

文章目录 Doris概述篇 一、前言 二、Doris简介

【数据仓库设计基础(四)】数据仓库实施步骤

文章目录 1&#xff0e;定义范围2&#xff0e;确定需求3&#xff0e;逻辑设计1&#xff09;建立需要的数据列表2&#xff09;识别数据源3&#xff09;制作实体关系图 4&#xff0e;物理设计1&#xff09;性能优化2&#xff09;数仓的拓展性 5&#xff0e;装载数据6&#xff0e;…

Vue封装全局SVG组件

1.SVG图标配置 1.安装插件 npm install vite-plugin-svg-icons -D 2.Vite.config.ts中配置 import { createSvgIconsPlugin } from vite-plugin-svg-icons import path from path export default () > {return {plugins: [createSvgIconsPlugin({// Specify the icon fo…

04. 人工智能核心基础 - 导论(3)

文章目录 人工智能和其他学科的关系为什么学习人工智能怎么学好人工智能&#xff1f;一些问题 Hi&#xff0c;你好。我是茶桁。 基于上一节课咱们的整体强度有点大&#xff0c;而且咱们马上也要进入高强度内容了&#xff0c;那么这一篇咱们就稍微水一篇吧。来聊聊天&#xff0…

FPGA 多路视频处理:图像缩放+视频拼接显示,HDMI采集,提供2套工程源码和技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐FPGA图像缩放方案推荐FPGA视频拼接方案推荐 3、设计思路框架视频源选择IT6802解码芯片配置及采集动态彩条缓冲FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 视频拼接算法图像缓存视频输出 4、vivado工程1&am…

【计算机网络】图解路由器(一)

本系列包含&#xff1a; 图解路由器&#xff08;一&#xff09;图解路由器&#xff08;二&#xff09; 图解路由器&#xff08;一&#xff09; 1、什么是路由器&#xff1f;2、什么是路由选择&#xff1f;3、什么是转发&#xff1f;4、路由器设备有哪些类型&#xff1f;5、根据…

创建vue3项目、链式调用、setup函数、ref函数、reactive函数、计算和监听属性、vue3的生命周期、torefs的使用、vue3的setup写法

1 创建vue3项目 # 两种方式- vue-cli&#xff1a;vue脚手架---》创建vue项目---》构建vue项目--》工具链跟之前一样- vite &#xff1a;https://cn.vitejs.dev/-npm create vuelatest // 或者-npm create vitelatest一路选择即可# 运行vue3项目-vue-cli跟之前一样-vite 创建的…

【小笔记】fasttext文本分类问题分析

【学而不思则罔&#xff0c;思维不学则怠】 2023.9.28 关于fasttext的原理及实战文章很多&#xff0c;我也尝试在自己的任务中进行使用&#xff0c;是一个典型的短文本分类任务&#xff0c;对知识图谱抽取的实体进行校验&#xff0c;判断实体类别是否正确&#xff0c;我构建了…

高级时钟项目(2)Json文件解析学习---C语言版本

笔者来介绍一下json文件解析 1、背景介绍 笔者在获取天气数据的时候&#xff0c;是通过MCU的WIFI去获取&#xff0c;但是获取到的数据json数据&#xff0c;需要解析&#xff0c;C语言没那么解析库&#xff0c;所以就需要找一些开源的解析库。 笔者找到cjson这个适用于C语言…

Vue - 组件递归

目录 组件递归子组件父组件 组件递归 当要渲染一个目录时&#xff0c;因为可能有嵌套数据&#xff0c;并且组件的层级未知&#xff0c;可以使用组件递归来解决 注意点&#xff1a; 1&#xff0c;使用递归时必须提供 name&#xff0c;也就是通过组件的 name 递归自己。 2&am…

Anaconda添加channels后出现unexpected urllib3 DEBUG logging from conda-build

1.问题描述 anaconda更新之后添加channels后出现bug: (base) ~/zlib-feedstock % conda build recipe 2>&1 | tee out ... INFO:conda_build.metadata:Attempting to finalize metadata for libzlib DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1):…