基于贪心算法的背包问题

算法设计与分析—贪心法求解背包问题C++(学习笔记) #include<iostream> #include <algorithm> using namespace std; typedef struct { //利用结构体联系w和v int w; int v; }act; bool Comp(act a, act b) { return a.v > b.v; //比较排序 } int KnapSack(act *a, int n, int c) { int i; do. 阅读详情

转载:http://blog.youkuaiyun.com/urtheappleinmyeye/article/details/19269455

【题目】
有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。
要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。
物品 A B C D E F G
重量 35 30 60 50 40 10 25
价值 10 40 30 50 35 40 30

【实验代码】

#include<stdio.h> 

/*  
    *x----存放物品的数组 
    m-----背包的容量 
*/
static void knapsack(int n,float m,float *v,float *w,float *x) 
{ 
 sort(n,v,w); 
 int i; 
 for(i=0;i<n;i++) 
 { 
  if(*(w+i)>m)  
   break; 
  //可以存放该物品时,置1 
  *(x+i)=1; 
  //放入后,背包的容量减少 
  m-=*(w+i); 
 } 
 //当此时背包的容量不够存放整个物品的情况时,存放一部分 
 if(i<n) 
  *(x+i)=m/(*(w+i)); 

} 

/*
    n-----背包可以存放物品的种类 
    *p----指向存放物品价值的数组 
    *q----指向存放物品重量的数组 
*/
void sort(int n,float *p,float *q) 
{ 
 int i; 
 int j; 
 for(i=0;i<n-1;i++) 
 for(j=i+1;j<n;j++) 
 if((*(p+i))/(*(q+i))<(*(p+j))/(*(q+j))) 
 { 
  float f; 
  f=*(p+i); 
  *(p+i)=*(p+j); 
  *(p+j)=f; 

  f=*(q+i); 
  *(q+i)=*(q+j); 
  *(q+j)=f; 
 } 

} 

int main() 
{

    int n=7;//物品种类  
    int m=150;//背包容量 
    float w1[7]={35,30,60,50,40,10,25};//各种物品的重量 
    float v1[7]={10,40,30,50,35,40,30};//各种物品的价值 
    float x1[6];//存放各种物品的存放情况 
    float *x; 
    float *w; 
    float *v; 
    w=w1; 
    v=v1; 
    x=x1; 

    int i; 

    for(i=0;i<n;i++) 
    *(x+i)=0; 

    knapsack(n,m,v1,w1,x); 

    printf("\n物品重量:\n"); 
    for(i=0;i<n;i++) 
    printf("%.1f\t",*(w+i)); 

    printf("\n\n物品价值:\n"); 
    or(i=0;i<n;i++) 
    printf("%.1f\t",*(v+i)); 

    printf("\n\n物品存放情况:\n"); 
    for(i=0;i<n;i++) 
    printf("%.1f\t",*(x+i)); 

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

相关推荐

C++实现贪心算法之背包问题

C++实现贪心算法之背包问题

m0_54000129的博客 1737

贪心法--背包问题(不是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万+

C++实现算法设计——贪心算法(背包问题)

引言:网上的代码多多少少都有点问题,所以自己写了一个。 问题:贪心算法背包问题 假设有n种宝物,每种宝物i对应价值为vi,重量wi,毛驴只能运载重量为m的宝物。每种宝物只能拿1件,可分割。如何使得毛驴运走的宝物价值最大? 贪心策略: 1)每次挑选价值最大的宝物装入背包,得到的结果是否最优? 2)每次挑选重量最小的宝物装入背包,得到的结果是否最优?3)每次挑选单位重量价值最大的宝物,价值是否最高? 算法设计 贪心算法背包问题 1)数据结构及初始化。 计算性价比 结构体item用于存储宝物的重量、.

weixin_44296768的博客 1万+

贪心法求解背包问题

问题描述:7个物品,重为{2,3,5,7,1,4,1},价值为{10,5,15,7,6,18,3},背包容量W=15,求最优解。 思路:将物品按单重价值降序排列,装满为止。 C++代码: #include&lt;iostream&gt; #include&lt;iomanip&gt; using namespace std; int KnapSack(int w[],int v[],in...

arthu6的博客 4085

贪心算法——背包问题

(1)时间复杂度:程序运行时间主要耗费在对物品按照单位重量价值排序上,采用的C++头文件algorithm中的sort方法,此方法采用快速排序,时间复杂度为O(2)根据贪心算法策略,以此取单位重量价值的最大物品存入背包中,直至背包填满,如果到达第i个物品时超出了背包容量,那么就取该物品其中的一部分放入背包中。所以在选择过程中需要将物品按照单位重量价值递减的顺序进行排序,以此取前面单位重量价值最大的物品。1)将物品的重量、价值和单位重量价值定义为一种结构体类型,方便对其按照单位重量价值从大到小进行排序。

小浪宝宝的博客 7859

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

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

贪心算法之——背包问题(nyoj106)

时间限制: 3000 ms | 内存限制: 65535 KB难度: 3描述现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1

m0_72345017的博客 769

Innovus中_clock_gen skew group的隐藏陷阱:如何避免自动分组导致的时序问题

本文深入剖析了在Innovus工具进行时钟树综合(CTS)时,`_clock_gen` skew group自动分组机制可能引发的隐蔽时序问题。文章通过实际案例,解释了该机制如何错误地将分频寄存器与配置寄存器归为一组,从而破坏时钟域边界并导致post-CTS时序违例,并提供了关闭自动提取、手动精确定义skew group等有效解决方案。

gpu4optimizer的博客 266

贪心法例题

今日白嫖 1/∞ ???? 01背包 //贪心法求解背包问题 /* 7 15 2 10 3 5 5 15 7 7 1 6 4 18 1 3 */ struct thing{ int w=0; int p=0; double wp=0; }; bool cmp(thing &t1, thing &t2){ return t1.wp>t2.wp; } void pro_1(){ int n=0, size=0; scanf("%d%d",&n, &s

Janus 379

高通ISP模块全解析:从Raw到JPEG的18个关键处理步骤(附避坑指南)

本文全面解析高通ISP模块从Raw到JPEG的18个关键处理步骤,涵盖原始数据预处理、色彩科学处理链、画质增强与降噪等核心环节。通过实战调优经验,揭示ISP架构中的技术原理与工程实践要点,帮助开发者避免常见问题,提升移动影像处理质量。

weixin_30399155的博客 359

别再拍脑袋估工时了!手把手教你用FPA功能点分析法,给软件项目算笔明白账

本文详细介绍了FPA功能点分析法在软件开发工作量评估中的应用,帮助团队告别拍脑袋估算。通过量化系统功能组件,FPA提供客观的工时和成本预估,特别适合需求不明确的项目初期。文章以财务系统为例,拆解FPA计算流程,并分享实用估算模板,助力技术管理者提升项目规划能力。

weixin_42614269的博客 387

背包问题贪心算法求解

题目 有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。 要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。 思路 具有最优子结构性质和贪心选择性质。只要是所有物品的总重量大于背包容纳量,那么背包一定能装满。注意背包问题与0-1背包问题的区别。 这2类问题都具有最优子结构性质,极为相似,但背包问题可以用贪心算法求解,而0-1背包问题却不能用贪心算法求解。 求解步骤 用...

practical_sharp的博客 6万+

VCS和UVM常用编译选项

VCS编译选项 -full64 在64bit模式下编译、仿真,用于64位操作系统 -j8 指定编译器可以并行编译的进程数为8 -timescale=1ns/1ps 指定仿真时间和精度 +libext+.v+.V+.sv+.svh 识别.v、.sv、.svh等多种格式文件 -sverilog 支持system verilog 编译 -f xxx.lisf 指定包含所有设计文件列表的文件名 -top test 设置顶层模块为test。(指包含.

qq_40571921的博客 9934

用贪心算法解决背包问题

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

wangmengmeng99的博客 2万+

【系统分析师】高分论文:论软件需求验证方法及应用

本文以某清算平台建设项目为例,探讨了软件需求验证方法的应用。该项目旨在隔离银行与支付公司的直接通信,满足央行监管要求。作为系统分析师,作者通过需求测试和需求评审两种方法确保需求质量。需求测试采用概念测试用例提前发现问题;需求评审通过正式与非正式形式多方确认需求。项目结合邮件评审、专家会议等方式,最终形成完善的需求文档。平台上线后运行良好,验证了需求管理的重要性。该案例表明,科学的需求验证是项目成功的关键保障。

数据知道的博客 8125

Open3D DBSCAN聚类

DBSCAN算法做为一种有名的密度聚类算法,它是通过邻域参数(Distance,MinPts)来刻画样本分布的紧密程度。而在真正开始之前,首先要理解下面这几个概念:更为具体的内容也可参考这篇文章点云DBSCAN聚类算法。...

dayuhaitang1的博客 1795

贪心算法解背包问题

辨析: 背包问题能用贪心算法求解,但是01背包问题不能用贪心算法求解(因为01背包问题不具备贪心选择性质----通过局部最优,达不到全局最优) 举个例子:背包容量=50; w[]={10,20,30} ,p[]={60,100,120} 用贪心选择(10+20)<50,p=160,但这并不是最优解,事实上(20+30)=50,p=100+120=220.才是问题的...

远行的博客 2万+

Could not find a package configuration file provided by “boost_signals“

gmapping/slam_gmapping/gmapping/CMakeLists.txt:14 (find_package)问题在14行,注释该行。,该语句的用以为告诉项目Boost库文件所在。

weixin_72050316的博客 1027

贪心算法解决背包问题

贪心算法解决背包问题 问题描述: 给定 n 个物品和一个容量为 C 的背包,请给出物品装入背包的方案,使得背包中物品的总价值 M 最大,并满足: 1.每个物品 I 的重量为 wi,价值为 vi。 2.每个物品可拆分,背包中物品的总重量不能超过容量 C 。 实验要求: 程序要求: 1)先写排序算法 Rank(),本文中使用快速排序完成,再写贪心算法 Greedy()。 2)两个步骤需要单独定义在程...

qq_41878620的博客 1万+

【系统分析师】第2章-基础知识:数学与工程基础(核心总结)

数学与工程基础

数据知道的博客 6813

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

贪心算法 背包问题 java_贪心算法求解背包问题

一.贪心算法1.贪心算法概念贪婪算法(Greedy algorithm)是一种对某些求最优解问题的更简单、更迅速的设计技术。用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过...

weixin_35126480的博客 1994

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

通过贪心算法来解决背包问题

通过贪心算法来解决背包问题 给定一个载重量为M的背包,考虑n个物品,其中第i个物品的重量 ,价值wi (1≤i≤n),要求把物品装满背包,且使背包内的物品价值最大。 有两类背包问题(根据物品是否可以分割),如果物品不可以分割,称为0—1背包问题(动态规划);如果物品可以分割,则称为背包问题(贪心算法)。 我在这里写的是通过贪心算法来解决背包问题。 假设xi是物品i装入背包的部分(...

qq_43238335的博客 4864

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

贪心算法(背包问题)

贪心算法的思想: 不从整体最优考虑,总是做出当前看来最好的选择。 仅根据当前已有的信息做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。 贪心算法的性质: 1)最优子结构:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。 2)贪心选择性:所谓贪心选择性质

千千 5505

背包问题(贪心算法)

  贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。   贪心算法还是比较好理解的一个算法,以前我也是这样认为的,感觉贪心就是每一步都做到最优解就可以了,但是后来结合问题发现自己的理解存在着一些问题。贪心算法比较经典的题目之一就是单源最短路径问题,这个问题在一些步骤上面我想了很久,有些细...

qq_38533859的博客 3万+
上一篇: Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
下一篇: 判断质数
X_sin
博客等级 码龄11年 6粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值