(贪心)背包问题

1.最优装载问题。

给出n个物体,第i个物体重量为wi。选择尽量多的物体,使得总重量不 超过C。

由于只关心物体的数量,所以装重的没有装轻的划算。只需把所有物体按重量从小到大 排序,依次选择每个物体,直到装不下为止

2.部分背包问题。

有n个物体,第i个物体的重量为wi,价值为vi。在总重量不超过C的情 况下让总价值尽量高。每一个物体都可以只取走一部分,价值和重量按比例计算。

本题在上一题的基础上增加了价值,所以不能简单地像上题那样先拿轻的(轻的可能价 值也小),也不能先拿价值大的(可能它特别重),而应该综合考虑两个因素。一种直观的 贪心策略是:优先拿“价值除以重量的值”最大的,直到重量和正好为C。
注意:由于每个物体可以只拿一部分,因此一定可以让总重量恰好为C(或者全部拿走 重量也不足C),而且除了最后一个以外,所有的物体要么不拿,要么拿走全部。

3.乘船问题。

有n个人,第i个人重量为wi。每艘船的最大载重量均为C,且最多只能乘两 个人。用最少的船装载所有人。

考虑最轻的人i,他应该和谁一起坐呢?如果每个人都无法和他一起坐船,则唯一的方 案就是每人坐一艘船。否则,他应该选择能和他一起坐船的人中最重的 一个j。这样的方法是贪心的,因此它只是让“眼前”的浪费最少。可以用反证法说明。

情况1:i不和任何一个人坐同一艘船,那么可以把j拉过来和他一起坐,总船数不会增 加(而且可能会减少)。
情况2:i和另外一人k同船。由贪心策略,j是“可以和i一起坐船的人”中最重的,因 此k比j轻。把j和k交换后k所在的船仍然不会超重(因为k比j轻),而i和j所在的船也不会超 重(由贪心法过程),因此所得到的新解不会更差
由此可见,贪心法不会丢失最优解。最后说一下程序实现。在刚才的分析中,比j更重 的人只能每人坐一艘船。这样,只需用两个下标i和j分别表示当前考虑的最轻的人和最重的 人,每次先将j往左移动,直到i和j可以共坐一艘船,然后将i加1,j减1,并重复上述操作。

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

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

相关文章

(贪心)区间问题大致思路

1.选择不相交区间。 a.描述: 数轴上有n个开区间(ai, bi)。选择尽量多个区间,使得这些区间两两 没有公共点。 b.思路总结: 1.区间x完全包含y,选y 2.按照bi从小到大排序,从第一个区间开始选 3.把所有和上一个区间相…

python queue windows_python Queue模块

创建一个“队列”对象import Queuemyqueue Queue.Queue(maxsize 10)Queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。将一个值放入队列中myqueue.put(10)调用队…

STM32的DHT11

DHT11基础 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传 感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高 的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测 温元件,并与一个高性能…

(priority_queue)自定义优先级

思考与总结: 1.优先队列,先出队列元素不是先进队列的元素,而是队列中优先级最高的元素 2.遇到这种题一般把每一个数据封装到一个struct里 3.然后根据优先级判断依据,我们通过重定向定义优先队列的优先级 如果我们写bool opera…

python 如何匹配列表中某个单词_Python中部分指定单词的最佳匹配项

如果要重复执行此操作,应创建一个索引:wordlist [word.strip() for word in "run, ran, rat, rob, fish, tree".split(,)]from collections import defaultdictclass Index(object):def __init__(self, wordlist()):self.trie defaultdict(s…

sigkill mysql_Ubuntu不能停止mysqld

我尝试运行服务mysql stop,killall -s SIGKILL mysqld,/etc/init.d/mysql停止,并停止mysql,但仍然看到这个输出从ps aux | grep mysql:root 32302 0.0 0.3 59040 2120 pts/8 S 06:03 0:00 sudo mysqld_saferoot 32305 0.0 0.1 4440 772 pts/8 S 06:03 0:00 /bin/sh …

java中函数_java中的函数

函数的概述1.函数定义: 能完成特定功能的代码段就是函数,每一个函数都是一个独立的小功能2.为什么要有: 如果没有函数,在实现一个功能时候,就要写一遍这个逻辑, 如果功能多次使用,就会产生大量重复的代码.有了函数之后,把这个功能封装到函数中,当你在使用这个功能时候不需要再写…

(dag模型+最长路+字典序)嵌套矩形

题目: 有 n 个矩形,每个矩形可以用两个整数 a, b 描述,表示它的长和宽。矩形 X(a, b) 可以嵌套在矩形 Y(c, d) 中当且仅当 a<c, b<d,或者 b<c, a<d(相当于把矩形 X 旋转…

Java智能卡 技术_java智能卡APDU学习笔记

因项目需要,利用APDU通信协议在ME手机端和卡端进行通讯。在实践的过程中遇到一些问题,先记录如下。APDU协议,即是智能卡与读写器间的应用层协议,在ISO7816-4[7]中定义了该协议的结构格式。APDU数据有两种结构,读写器使…

(二叉树存储+递归遍历)Binary Tree Traversals

题目: A binary tree is a finite set of vertices that is either empty or consists of a root r and two disjoint binary trees called the left and right subtrees. There are three most important ways in which the vertices of a binary tree can be sys…

java mutator_Java-使用Accessor和Mutator方法

小编典典让我们看一下基础知识:“ Accessor”和“ Mutator”只是获取器和设置器的奇特名称。一个获取器“Accessor”返回一个类的变量或其值。设置器“ Mutator”设置类变量指针或其值。因此,首先您需要设置一个带有一些要获取/设置的变量的类&#xff1…

(二叉树创建+查找)精灵邮差

题目 精灵是非常奇特的生物。众所周知,他们可以活很长时间,他们神奇的能力不是一件容易接受的事情。此外,他们住在树上。但是,你可能不知道有些事情。虽然通过魔法传送提供东西非常方便(很像电子邮件)。他…

java反序列化异常接不到_由Java对象反序列化异常想到的

今天写代码时候遇到一个异常,异常信息如下:Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.spri…

(找规律)Magic of David Copperfield

题目: 每一个参与的观众被要求将手指放在左上方的图片上(即编号为1的图片),魔术师开始了:魔术师告诉观众在图片上移动k次(移动是把手指放到上下左右相邻的图片上,如果那儿有图片的话&#xff0…

java 日期只计算年月日大小_Java 计算两个日期相差多少年月日

JDK7及以前的版本,计算两个日期相差的年月日比较麻烦。JDK8新出的日期类,提供了比较简单的实现方法。/*** 计算2个日期之间相差的 相差多少年月日* 比如:2011-02-02 到 2017-03-02 相差 6年,1个月,0天*paramfromDate Y…

(DAG+固定终点的最长路和最短路)硬币问题

##题目: 有n种硬币,面值分别为v1, v2, …, vn,每种都有无限多。给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值。 Input 第一行两个整数,n,S…

java虚拟机堆栈工作原理_java虚拟机工作原理?

展开全部从宏观上介绍一下Java虚拟机的e5a48de588b662616964757a686964616f31333363373731工作原理。从最初编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件&#…

(二分)Trailing Zeroes (III)

题目&#xff1a; n的阶乘尾部有q个连续的0&#xff0c;现在给你q&#xff0c;请你算出满足条件的n&#xff0c;如果有多个n满足条件&#xff0c;输出最小的那个即可。 Input 输入一个T(T < 10000),表示样例数量。 每个样例输入一个q。(1 < q < 100,000,000) Outp…

ais文件还原到mysql_SQLSERVER 数据库可疑的解决步骤

异常关机后&#xff0c;金蝶帐套突然无法访问&#xff0c;发现数据库置疑&#xff0c;使用此方案解决&#xff1a;注意&#xff1a;在做任何修复操作之前&#xff0c;请务必备份.mdf/.ndf以及.ldf文件。一般情况下这样可以解决&#xff1a;1、将数据库设置为应急状态ALTER DATA…

(DFS)n皇后问题

Problem Description 在N*N的方格棋盘放置了N个皇后&#xff0c;使得它们不相互攻击&#xff08;即任意2个皇后不允许处在同一排&#xff0c;同一列&#xff0c;也不允许处在与棋盘边框成45角的斜线上。 你的任务是&#xff0c;对于给定的N&#xff0c;求出有多少种合法的放置…