背包-贪心法

0022算法笔记——【贪心算法】背包问题,最优装载问题 1、背包问题      (1)0-1背包问题:给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大?      注:在选择装入背包的物品时,对每种物品i只有2种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。       0-1背包问题可用动态规划算法来求解,具体过程可参看笔者博文 阅读详情

L2-003. 月饼

时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。

注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种月饼、以及5万吨第3种月饼,获得 72 + 45/2 = 94.5(亿元)。

输入格式:

每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N表示月饼的种类数、以及不超过500(以万吨为单位)的正整数D表示市场最大需求量。随后一行给出N个正数表示每种月饼的库存量(以万吨为单位);最后一行给出N个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。

输出格式:

对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后2位。

输入样例:

3 2018 15 1075 72 45

输出样例:

94.50

#include<iostream>
using namespace std;
#include<string.h>
#include<math.h>
double m[1010],v[1010],x[1010]={0};
int N;
double M;
double sum=0;

void sort(int n,double m[],double v[]){
	double k,r,temp;
	int l;
	for(int i=1;i<=n;i++){    //当只有一个数据时,排序会出现错误,不知道为什么,估计是越界
		k=v[i]/m[i];
		for(int j=i;j<=n;j++){
			r=v[j]/m[j];
			if(r>k){
				l=j;
				k=r;
			}
		}
		if(l!=i){
			temp=v[i];
			v[i]=v[l];
			v[l]=temp;
			
			temp=m[i];
			m[i]=m[l];
			m[l]=temp;
		}
	}
}

void ksp(int n,double M,double m[],double v[],double x[]){
	double c=M;
	int i;
	for(i=1;i<=n;i++){
		if(m[i]>c)
		    break;
		    
		x[i]=1;
		sum+=v[i];
		c-=m[i];
	}
	if(i<=n){
		x[i]=c/m[i];
		sum+=x[i]*v[i];
	}
}


int main(){
	int i,j,k,l;
	cin>>N>>M;
	for(i=1;i<=N;i++){
		cin>>m[i];
	}
	for(j=1;j<=N;j++){
		cin>>v[j];
    }
    if(N!=1)
	sort(N,m,v);  // 根据其单位价值进行排序 
	ksp(N,M,m,v,x);
	printf("%.2lf",sum);
	return 0;
}


贪心法——背包问题【通俗易懂】 贪心法——背包问题一、概述 贪心法把一个复杂问题分解为一系列较为简单的局部最优选择,每一步选择都是对当前的一个扩展,直到获得问题的完整解。二、适用范围 典型应用是求解最优化问题,而且对许多问题都能得到整体最优解。 注意:由于贪心法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优,这种局部最优选择并不总获得整体最优解,但通常能获得近似最优解。三、背包问题【问题】 给定n个物品和一 阅读详情

相关推荐

0/1背包问题(回溯法、分支限界法、动态规划法、贪心法)(C++版)

此篇整理自李老师上课PPT           --- On one way by myself(1)问题描述    有n个重量分别为{w1,w2,…,wn}的物品,它们的价值分别为{v1,v2,…,vn},给定一个容量为W的背包。设计从这些物品中选取一部分物品放入该背包的方案,每个物品要么选中要么不选中,要求选中的物品不仅能够放到背包中,而且重量和为W具有最大的价值。输入:3          ...

u010323330的博客 3万+

用贪心算法解决背包问题

贪心算法:顾名思义,贪心算法总是能做到当前看来是最好的选择。也就是说贪心算法并不从整体最优上加以考虑,它所作出的选择只是在某种意义上的局部最优选择。 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,是贪心算法与动态规划算法的主要区别。 0-1背包问题 给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为W。问应...

wangmengmeng99的博客 2万+

0-1背包动态规划&部分背包贪婪算法

编程语言:C语言 编程软件:Microsoft Visul C++ 6 操作系统:Windows 8.1 有5个物品,其重量分别是{2, 2, 6, 5, 4},价值分别为{6, 3, 5, 4, 6},背包的容量为10,求装入背包的物品和获得的最大价值。 通过编程,学习用0-1背包的动态规划和部分背包的贪婪算法解决以上问题。

贪心法--背包问题(不是0/1背包问题)

课后习题-----------习题七第1题 问:用贪心法求解如下背包问题的最优解:有7个物品,重量分别为(2,3,5,7,1,4,1),价值分别为(10,5,15,7,6,18,3),背包容量W=15。写出求解过程。 答:       1、单价分别为(5,5/3,3,1,6,4.5,3);      按单价的大小分别为重量和价值重新排序! 排序为:      重量:(1,2,4,5,1

YuJie1996 1万+

贪心法解决01背包(贪心算法)

运用贪心策略解决0 1背包问题 void beibao(int *w,int *v,int *x,int n,int *C) { int i,j,temp; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(v[i]/w[i]<v[j]/w[j]) { temp=v[i]; v[i]=v[j]; v[j]=temp; temp=w[i]; w[i]=w[j]; w[j]=temp; } for(i=0;i<n;i++) x[i]=0; for(i=0;w[i]<=*C;i++) { x[i]=1; *C=*C-w[i]; } } void main() { int i,*w,*v,*x,n,C; cout<<"请输入物品数"<>n; w=new int(n);//动态分配内存 v=new int(n); x=new int(n); cout<<"请输入背包的容量"<>C; cout<<"请分别输入"<<n<<"个物品的重量:"<<endl; for(i=0;i>w[i]; cout<<"请分别输入"<<n<<"个物品的价值:"<<endl; for(i=0;i>v[i]; beibao(w,v,x,n,&C); cout<<"应用贪心策略装入背包的物品的重量分别为:"<<endl; for(i=0;i<n-1;i++) if(x[i]==1) cout<<" "<<w[i]; cout<<" "<<C<<"/"<<w[i]<<endl; }

c语言贪心算法

c语言的贪心算法,有背包问题等,附源代码,一份实验报告

贪心法求解背包问题 C++

1.问题描述     背包问题是给定n个重量为{w1, w2,… ,wn}、价值为{v1, v2, … ,vn}的物品和一个容量为C的背包,求这些物品中的一个最有价值的子集,并且要能够装到背包中每次从物品集合中选择单位重量价值最大的物品,如果其重量小于背包容量,就可以把它装入,并将背包容量减去该物品的重量。     注意背包问题和0/1背包问题的区别,背包问题中,物品是可以部分装入背包的,0/...

学习笔记 9056

用贪心法求解背包问题的解决方法

贪心方法:总是对当前的问题作最好的选择,也就是局部寻优。最后得到整体最优。应用:1:该问题可以通过“局部寻优”逐步过渡到“整体最优”,这是贪心选择性质与“动态规划”的主要差别。2:最优子结构性质:某个问题的整体最优解包含了“子”问题的最优解。完整的代码如下: 代码如下:#include “iostream”using namespace std;struct goodinfo{ float p; //物品效益 float w; //物品重量 float X; //物品该放的数量 int flag; //物品编号};//物品信息结构体void Insertionsort(goodinfo goo

算法设计的背包问题-------------用贪心算法求解

  •public static float knapsack(float c,float [] w, float [] v,float [] x) •   { •      int n=v.length; •      Element [] d = new Element [n]; •      for (int i = 0; i &lt; n; i++) d[i] = new Ele...

aischang 1222

基于深度学习实现实时视频目标检测

实时视频目标检测是计算机视觉领域的研究热点之一,其应用场景包括智能监控、自动驾驶、机器人视觉等多个领域。深度学习技术的快速发展使得实时视频目标检测变得更加可行和准确。本文提出一种基于深度学习实现的实时视频目标检测系统,使用Python和OpenCV作为开发工具,具有高效、准确和实时的特点。 本系统的主要需求是实现实时视频目标检测功能,可以在不同的应用场景中使用。具体的需求如下:2.1 视频输入本系统需要从摄像头或视频文件中获取实时视频流,并对视频流中的目标进行检测和跟踪。2.2 目标检测本系统需要使用深度学

分享毕业设计的案例和论文 1940

光耦继电器电路分析

光耦电路的分析笔记

MingYue_SSS的博客 6873

贪心法解决背包问题

在这里面就是如果背包的剩余容量是大于物品的重量的那么这个物品是可以放下的这个的解向量就是1继续进行这个循环,但如果背包的剩余容量是小于物品的重量那么就跳出这个循环将解向量设为剩余重量除以这个物品重量。给定n个物品和一个容量为M的背包,物品i的重量是wi,其效益值是pi ,xi为装入系数,背包问题就是如何选择装入背包的物品,使得装入背包中物品的总的效益值(Σpixi)最大。考虑下列情况下的背包问题:n=3,M=20,(p1,p2,p3)=(25,24,15),(w1,w2,w3)=(18,15,10)

m0_53345417的博客 6208

【VisionMaster】图像源模块之本地图像

图像采集之图像源

zhy29563 6956

贪心法解决0-1背包问题

贪心法是指 在背包没有装满之前,只要能装得下就装进背包. 在使用贪心法解决0-1背包问题主要在于分解方案和贪心选择方案.(贪心法不能保证最优解) 为了尽可能的得到最优解,选择物品时,总是选择v[i]/w[i]最大的物品装进去 所以在程序的开始,应首先对物品按照v[i]/w[i]从大到小进行排序,因此在排序的过程中可以定义一个数组来记录原本的第i个物品在排序之后放在第几位,即th[

xyzpqre的博客 4299

数据分析是什么?

说道“数据分析”一词,大家应该并不陌生,数据分析从字面上来理解,就是对数据做出分析然后得出一个结论,看起来浅显易懂,下面我们把这个词语分开得到的是“数据”与“分析”。“数据”的范围就很广泛了,小到一个计量数字,大到成亿级别的数据汇总,都可以称为数据;“分析”一词并不难理解,以智慧思维的方法对某一事物做出合理的解释,给出结论是为分析,一般会用到数学上的分析方法,比如统计学或者概率论等等。 1. 什么是数据分析 1) 数据分析发展背景 进入到 21 世纪以后,伴随着互联网的迅速发展,大数据应运而生,越来越多的数

MC_XY的博客 5432

第4篇:使用 NModbus 库快速搭建 Modbus TCP 通信(从零开始用 C# 开发 Modbus 上位机)

本文介绍了如何使用 NModbus 库快速搭建 Modbus TCP 上位机通信程序。通过安装 NModbus4 NuGet 包,开发者可以轻松实现 Modbus TCP 连接,无需手动处理底层协议细节。文章详细演示了核心功能实现: 创建 TCP 客户端连接设备 读取保持寄存器(功能码0x03) 写入单个寄存器(功能码0x06) 关闭连接释放资源 提供完整C#示例代码,包含初始化连接、数据读写等关键操作,帮助开发者快速构建Modbus TCP通信应用。相比手动实现,NModbus库大幅简化了开发流程,特别适

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1044

贪心法求解背包问题

对每一子问题求解,得到子问题的局部最优解;把子问题的解局部最优解合成原来解问题的一个解。采用循环语句,当可以向求解目标前进一步时,就根据局部最优策略,得到一个部分解,缩小问题的范围或规模;贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

谢黄灌汤包的博客 1603

openbmc 支持mctp over pcie(三)(支持作为endpoint)

本文介绍了在Intel BHS平台上支持MCTP over PCIe端点开发的调试方法。开发基于CodeConstruct和AspeedTech-BMC的开源项目,将内核驱动改为模块形式以便调试。内容包括DTS配置、驱动模块设置步骤,以及如何将BMC配置为端点设备。调试过程涉及内核模块加载、MCTPD启动、参数设置等关键命令,并展示了路由表、地址和邻居信息的测试结果。该方案仅为实验性工作,需注意停止其他使用/dev/aspeed-mctp0接口的应用。

wit_yuan的专栏 1553

贪心法-一般背包问题

想象你有一个背包,它最多可以放公斤的物品。你面前有个物品,每个物品的重量是,如果将这个物品完全放入背包,你将获得的收益。

qq_52291558的博客 1720

Apifox接口测试+自动化测试

Apifox 接口测试+自动化测试快速入门!

程序员小杨哥的博客 1万+

【用unity实现100个游戏之1】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(一)(附源码)

俯视角射击游戏)是一类以俯视视角进行游戏展示的射击游戏。在这种游戏中,玩家控制着一个角色或载具,从俯视的角度上方观察游戏世界,并与敌人进行战斗。这种视角使玩家能够有更好的全局观察和策略性,同时也强调快速反应和精确射击。视角:俯视角度可以是固定的,也可以随着玩家角色的移动而变化,但都允许玩家以全局视角观察整个战场,有利于制定战略和规划行动。射击:玩家通常需要使用各种武器来与敌人进行战斗,包括枪械、爆炸物等。射击动作依赖于玩家的反应速度和准确性。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7829

贪心法求解背包问题。(C++)(贪心法)

算法经典题型11 贪心法求解背包问题。 有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? 用到的思想—贪心法 博主用到的环境:Win7, CodeBlocks等。 一、代码 #include<iostream> #include<algorithm> using namespace std; class Good { private: int num; //物品编号 double weight; //物品重量 double valu

weixin_45797533的博客 2101

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

背包问题贪心法可解的证明

(最优子结构性质&贪心选择性质&假设归纳法证明每一步贪心得到最优解)

哈哈哈哈哈哈哈哈的博客 4636

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java蛮力法背包问题_用蛮力法、动态规划法和贪心法求解01背包问题讲解

《用蛮力法、动态规划法和贪心法求解01背包问题讲解》由会员分享,可在线阅读,更多相关《用蛮力法、动态规划法和贪心法求解01背包问题讲解(19页珍藏版)》请在人人文库网上搜索。1、算法设计与分析项 目 名 称:用蛮力法、动态规划法和贪心法求解0/1背包问题作者姓名:余武丹李红波刘红梅完成日期:2013年9月20日目录第1章 :简介(Introduction)第2章 :算法定义(Algorithm S...

weixin_39926042的博客 1176

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: L2-006. 树的遍历
下一篇: git 命令
Parachutist-One
博客等级 码龄10年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值