背包问题-贪心法和动态规划法求解
数据结构 背包问题

数据结构背包问题背景介绍:数据结构是计算机科学中非常重要的一门学科,它研究的是数据组织、存储和管理的方式。
背包问题是数据结构中的一个经典问题,它涉及到在给定的一组物品中选择一些物品放入背包中,使得背包的总重量或总价值达到最大化。
在本文中,我们将详细介绍背包问题的定义、解决方法和应用领域。
一、问题定义背包问题可以被描述为:给定一个背包,它能容纳一定的重量,再给定一组物品,每个物品有自己的重量和价值。
我们的目标是找到一种方式将物品放入背包中,使得背包的总重量不超过其容量,同时背包中物品的总价值最大化。
二、解决方法1. 贪心算法贪心算法是一种简单而有效的解决背包问题的方法。
它基于贪心的思想,每次选择当前具有最大价值重量比的物品放入背包中。
具体步骤如下:- 计算每个物品的价值重量比,即物品的价值除以其重量。
- 按照价值重量比从大到小对物品进行排序。
- 依次将物品放入背包中,直到背包的总重量达到容量限制或所有物品都放入背包。
贪心算法的优点是简单快速,但它并不能保证一定能找到最优解。
2. 动态规划动态规划是解决背包问题的一种经典方法。
它将问题划分为若干子问题,并通过求解子问题的最优解来求解原问题的最优解。
具体步骤如下:- 定义一个二维数组dp,其中dp[i][j]表示在前i个物品中,背包容量为j时的最大价值。
- 初始化dp数组的第一行和第一列为0,表示背包容量为0或物品数量为0时的最大价值都为0。
- 逐行填充dp数组,对于每个物品,考虑将其放入背包或不放入背包两种情况,选择价值最大的方案更新dp数组。
- 最终dp数组的最后一个元素dp[n][m]即为问题的最优解,其中n为物品数量,m为背包容量。
动态规划方法能够保证找到最优解,但其时间复杂度较高,对于大规模的问题可能会耗费较长的计算时间。
三、应用领域背包问题在实际生活和工程领域中有着广泛的应用,以下是一些常见的应用领域:1. 物流配送在物流配送中,背包问题可以用来优化货车的装载方案,使得货车的装载量最大化,从而减少运输成本。
0-1背包问题的多种解法

问题描述0/1 背包问题 :现有 n 种物品,对 1<=i<=n ,已知第 i 种物品的重量为正整数 W i ,价值为正整数 V i , 背包能承受的最大载重量为正整数 W ,现要求找出这 n 种物品的一个子集,使得子集中物 品的总重量不超过 W 且总价值尽量大。
(注意:这里对每种物品或者全取或者一点都不取, 不允许只取一部分)算法分析根据问题描述,可以将其转化为如下的约束条件和目标函数:nw i x i W i 1 i i(1)x i { 0,1}( 1 i n)nmax v i x i (2) i1于是,问题就归结为寻找一个满足约束条件( 1 ),并使目标函数式( 2 )达到最大的 解向量 X (x 1, x 2 ,x 3, ........... , x n ) 。
首先说明一下 0-1 背包问题拥有最优解。
假设 (x 1,x 2,x 3, ........ ,x n ) 是所给的问题的一个最优解, 则(x 2,x 3, ............... ,x n )是下面问题的n n n个问 题 的 一 个 最 优解 , 则v i y iv i x i , 且 w 1x 1w i y i W 。
因此 ,i 2 i 2 i 2一个最优解:w i x i Wi2w 1x 1nmax v i x i 。
如果不是的话,设(y 2,y 3, , y n ) 是这x i {0,1}( 2 i n)i2n n nv1x1 v i y i v1x1 v i x i v i x i ,这说明(x1,y2,y3, ............. ,y n) 是所给的0-1 背包问i 2 i 2 i 1题比( x1 , x 2 , x3 , ... , x n ) 更优的解,从而与假设矛盾。
穷举法:用穷举法解决0-1 背包问题,需要考虑给定n 个物品集合的所有子集,找出所有可能的子集(总重量不超过背包重量的子集) ,计算每个子集的总重量,然后在他们中找到价值最大的子集。
0_1背包问题的多种解法

一、 问题描述0/1背包问题:现有n 种物品,对1<=i<=n ,已知第i 种物品的重量为正整数W i ,价值为正整数V i ,背包能承受的最大载重量为正整数W ,现要求找出这n 种物品的一个子集,使得子集中物品的总重量不超过W 且总价值尽量大。
(注意:这里对每种物品或者全取或者一点都不取,不允许只取一部分)二、 算法分析根据问题描述,可以将其转化为如下的约束条件和目标函数:)2(max )1()1}(1,0{11∑∑==⎪⎩⎪⎨⎧≤≤∈≤ni i i ini i i x v n i x Wx w 于是,问题就归结为寻找一个满足约束条件(1),并使目标函数式(2)达到最大的解向量),......,,,(321n x x x x X =。
首先说明一下0-1背包问题拥有最优解。
假设),......,,,(321n x x x x 是所给的问题的一个最优解,则),......,,(32n x x x 是下面问题的一个最优解:∑∑==⎪⎩⎪⎨⎧≤≤∈-≤ni i i ini i i x v n i x x w W x w 2211max )2}(1,0{。
如果不是的话,设),......,,(32n y y y 是这个问题的一个最优解,则∑∑==>n i ni ii ii xv y v 22,且∑=≤+ni iiW yw x w 211。
因此,∑∑∑====+>+ni i i n i n i i i i i x v x v x v y v x v 1221111,这说明),........,,,(321n y y y x 是所给的0-1背包问题比),........,,,(321n x x x x 更优的解,从而与假设矛盾。
穷举法:用穷举法解决0-1背包问题,需要考虑给定n 个物品集合的所有子集,找出所有可能的子集(总重量不超过背包重量的子集),计算每个子集的总重量,然后在他们中找到价值最大的子集。
【优质】背包问题实验报告-范文word版 (13页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==背包问题实验报告篇一:背包问题实验报告课程名称:任课教师:班级:201X姓名:实验报告算法设计与分析实验名称:解0-1背包问题王锦彪专业:计算机应用技术学号:11201X 严焱心完成日期: 201X年11月一、实验目的:掌握动态规划、贪心算法、回溯法、分支限界法的原理,并能够按其原理编程实现解决0-1背包问题,以加深对上述方法的理解。
二、实验内容及要求:1.要求分别用动态规划、贪心算法、回溯法和分支限界法求解0-1背包问题;2.要求显示结果。
三、实验环境和工具:操作系统:Windows7 开发工具:Eclipse3.7.1 jdk6 开发语言:Java四、实验问题描述:0/1背包问题:现有n种物品,对1<=i<=n,第i种物品的重量为正整数Wi,价值为正整数Vi,背包能承受的最大载重量为正整数C,现要求找出这n种物品的一个子集,使得子集中物品的总重量不超过C且总价值尽量大。
动态规划算法描述:根据问题描述,可以将其转化为如下的约束条件和目标函数:nmax?vixi?n??wixi?C?i?1?x?{0,1}(1?i?n)?i寻找一个满足约束条件,并使目标函数式达到最大的解向量nX?(x1,x2,x3,......,xn)wixi,使得?i?1?C,而且?vixii?1n达到最大。
0-1背包问题具有最优子结构性质。
假设(x1,x2,x3,......,xn)是所给的问题的一个最优解,则(x2,x3,......,xn)是下面问题的一个最优解:?n??wixi?C?w1x1max?i?2?x?{0,1}(2?i?n)?i如果不是的话,设(y?vixi。
i?2nn2,y3,......,yn)是这个问题的一个最优解,则?viyi??vixi,且w1x1 i?2i?2n??wiyii?2?C。
浅谈0-1背包问题的常用算法

2 0 1 3年 1 0月下 C o n s u me r E l e c t r o n i c s Ma g a z i n e 技 术 交 流
浅谈 0 - 1 背包问题的常用算法
汤赫 男
( 吉林工商学院信息工程学院,长春 1 3 0 0 6 2) 摘 要 :0 -1 背 包问题是典型的 NP ~完全问题 ,无论从 理论 上还是 实践上都有一定的研究意义。本文综述 了几 种0 — 1背包问题的 常用算法 ,分析算法的优劣 ,预 测 0 - 1背包问题的发展方向。 关键 词 :0 — 1背包问题 ;动 态规划法 ;贪心法 ;分支界限法
一
、
∑w ,
l {
㈠ { “ } m a x ∑
{ j
二 、常用 的 0 - 1 背 包问题算法 ( 一) 蛮力法。 蛮 力法又称穷举法或枚举法,是一种简单、 直接、有效的方法,是初学者入 门的方法 。蛮力法要求遍历所 有可能情 况一次且仅一次 ,筛选 出符合要求 的解。应用蛮力法 求解 0 - 1 背包 问题, 需要考虑给定的 n 个物品集合的所有子集, 找出所有总重量不超过背包容量的子集 ,计算每个可能子集的 总价值,然后找 出价值最大的子集 。对于一个具有 n个元素的 集合 ,其子集数量是 2 “,所 以,不论生成子集 的算法效率有 多高 ,蛮力法求解 0 - 1 背包 问题都会导致一个 Q ( 2 n )的算法 。 ( 二 )动 态规划法。动态规划 法是一种通用 的算 法设计 技术用来求解 多阶段决策最优 化问题。这类 问题都满 足最优 性原理,即原 问题 的最优 性包含着子 问题 的最优性 。 应用 动态规划法 求解 0 - 1 背包 问题 ,可 以将 0 — 1背包 问 题看 作一个 多阶段决策最 优化 问题 。n个物 品集合 的所 有子 集可 以看 作该 问题 的所有 可行解;这些可行解 都是满足约束 条件 的,可行解可能不止一个,通过 目标 函数找到最优解 。 动态 规划 法求解 0 - 1 背包 问题 的算法描述 : 设V ( n , C )表 示将 n个 物 品装入 容量 为 C的背 包获 得 的 最大价值 。 初 始 状 态 :V ( i , 0 ) = V ( 0 , j ) = 0 , 0≤ i ≤n , 0≤ j≤ C 则V ( i , j )表示 将前 i 个 物 品装入 容量 为 j的背 包获 得
用蛮力法、动态规划法和贪心法求解0 1背包问题

printf("\n");
}
}
以下要依次判断每个子集的可行性,找出可行解:
voidpanduan(inta[][4],intcw[])////判断每个子集的可行性,如果可行则计算其价值存入数组cw,不可行则存入0
{
int i,j;
int n=16;
int sw,sv;
for(i=0;i<16;i++)
用蛮力法解决0/1背包问题,需要考虑给定n个物品集合的所有子集,找出所有可能的子集(总重量不超过背包容量的子集),计算每个子集的总价值,然后在他们中找到价值最大的子集。
所以蛮力法解0/1背包问题的关键是如何求n个物品集合的所有子集,n个物品的子集有2的n次方个,用一个2的n次方行n列的数组保存生成的子集,以下是生成子集的算法:void force(int a[][4])//蛮力法产生4个物品的子集
{
int i,j;
int n=16;
int m,t;
for(i=0;i<16;i++)
{t=i;
for(j=3;j>=0;j--)
{
m=t%2;
a[i][j]=m;
t=t/2;
}
}
for(i=0;i<16;i++)//输出保存子集的二维数组
{
for(j=0;j<4;j++)
{
printf("%d",a[i][j]);
i++;
}
return maxprice;
}
#include<stdio.h>
#include<stdlib.h>
ACM背包问题

背包问题
如果给你一个背包,要你从许多东西里选择一些装进来,只要这个包装得下,你就可 以将包里的东西全部拿走了,那么你会如何选择物品呢?这里你需要考虑的是背包的体积 和承重限制,当然最重要的是你拿走的东西的总价值最大。这样的问题就是背包问题,许 多问题都可以转化为背包问题来考虑。背包问题是一个在运筹学领域里常见的典型 NP-C 难题,对该问题的求解方法的研究无论是在理论上,还是在实践中都具有一定的意义。
while (goods[0].flag<goods[i].flag) {
goods[i+1]=goods[i]; i--; } goods[i+1]=goods[0]; } ///////////////////////////////////////////
·78·
第 4 章 背包问题
cout<<"最优解为:"<<endl; for(i=1;i<=n;i++) {
4.3.1 〖案例 2〗0/1 背包
需对容量为 c 的背包进行装载。从 n 个物品中选取装入背包的物品,每件物品 i 的重 量为 wi,价值为 pi。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最 佳装载是指所装入的物品价值最高。限制:每个物品不能被分割,要不被装载,要不不被 装载。
第一行物品个数,接下来分别为物品价值,再接下来分别为物品的价值。再接下来分 别为物品的重量,最后为背包的容量。
数据结构与算法: 不需要特殊的数据结构 算法采用贪婪法 首先输入物品信息和背包容量,然后每次选比重最大的装载。
struct goodinfo
{ float p; float w; float X; int flag;
0-1背包问题-贪心法和动态规划法求解

实验四“0-1”背包问题一、实验目的与要求熟悉C/C++语言的集成开发环境;通过本实验加深对贪心算法、动态规划算法的理解。
二、实验内容:掌握贪心算法、动态规划算法的概念和基本思想,分析并掌握“0-1”背包问题的求解方法,并分析其优缺点。
三、实验题1.“0-1”背包问题的贪心算法2.“0-1”背包问题的动态规划算法说明:背包实例采用教材P132习题六的6-1中的描述。
要求每种的算法都给出最大收益和最优解。
设有背包问题实例n=7,M=15,,(w0,w1,。
w6)=(2,3,5,7,1,4,1),物品装入背包的收益为:(p0,p1,。
,p6)=(10,5,15,7,6,18,3)。
求这一实例的最优解和最大收益。
四、实验步骤理解算法思想和问题要求;编程实现题目要求;上机输入和调试自己所编的程序;验证分析实验结果;整理出实验报告。
五、实验程序// 贪心法求解#include<iostream>#include"iomanip"using namespace std;//按照单位物品收益排序,传入参数单位物品收益,物品收益和物品重量的数组,运用冒泡排序void AvgBenefitsSort(float *arry_avgp,float *arry_p,float *arry_w ); //获取最优解方法,传入参数为物品收益数组,物品重量数组,最后装载物品最优解的数组和还可以装载物品的重量float GetBestBenifit(float*arry_p,float*arry_w,float*arry_x,float u);int main(){float w[7]={2,3,5,7,1,4,1}; //物品重量数组float p[7]={10,5,15,7,6,18,3}; //物品收益数组float avgp[7]={0}; //单位毒品的收益数组float x[7]={0}; //最后装载物品的最优解数组const float M=15; //背包所能的载重float ben=0; //最后的收益AvgBenefitsSort(avgp,p,w);ben=GetBestBenifit(p,w,x,M);cout<<endl<<ben<<endl; //输出最后的收益system("pause");return 0;}//按照单位物品收益排序,传入参数单位物品收益,物品收益和物品重量的数组,运用冒泡排序void AvgBenefitsSort(float *arry_avgp,float *arry_p,float *arry_w ) {//求出物品的单位收益for(int i=0;i<7;i++){arry_avgp[i]=arry_p[i]/arry_w[i];}cout<<endl;//把求出的单位收益排序,冒泡排序法int exchange=7;int bound=0;float temp=0;while(exchange){bound=exchange;exchange=0;for(int i=0;i<bound;i++){if(arry_avgp[i]<arry_avgp[i+1]){//交换单位收益数组temp=arry_avgp[i];arry_avgp[i]=arry_avgp[i+1];arry_avgp[i+1]=temp;//交换收益数组temp=arry_p[i];arry_p[i]=arry_p[i+1];arry_p[i+1]=temp;//交换重量数组temp=arry_w[i];arry_w[i]=arry_w[i+1];arry_w[i+1]=temp;exchange=i;}}}}//获取最优解方法,传入参数为物品收益数组,物品重量数组,最后装载物品最优解的数组和还可以装载物品的重量float GetBestBenifit(float*arry_p,float*arry_w,float*arry_x,float u) {int i=0; //循环变量ifloat benifit=0; //最后收益while(i<7){if(u-arry_w[i]>0){arry_x[i]=arry_w[i]; //把当前物品重量缴入最优解数组benifit+=arry_p[i]; //收益增加当前物品收益u-=arry_w[i]; //背包还能载重量减去当前物品重量cout<<arry_x[i]<<" "; //输出最优解}i++;}return benifit; //返回最后收益}//动态规划法求解#include<stdio.h>#include<math.h>#define n 6void DKNAP(int p[],int w[],int M,const int m); void main(){int p[n+1],w[n+1];int M,i,j;int m=1;for(i=1;i<=n;i++){m=m*2;printf("\nin put the weight and the p:");scanf("%d %d",&w[i],&p[i]);}printf("%d",m);printf("\n in put the max weight M:");scanf("%d",&M);DKNAP(p,w,M,m);}void DKNAP(int p[],int w[],int M,const int m) {int p2[m],w2[m],pp,ww,px;int F[n+1],pk,q,k,l,h,u,i,j,next,max,s[n+1];F[0]=1;p2[1]=w2[1]=0;l=h=1;F[1]=next=2;for(i=1;i<n;i++){k=l;max=0;u=l;for(q=l;q<=h;q++)if((w2[q]+w[i]<=M)&&max<=w2[q]+w[i]){u=q;max=w2[q]+w[i];}for(j=l;j<=u;j++){pp=p2[j]+p[i];ww=w2[j]+w[i];while(k<=h&&w2[k]<ww){p2[next]=p2[k];w2[next]=w2[k];next++;k++;}if(k<=h&&w2[k]==ww){if(pp<=p2[k])pp=p2[k];k++;}else if(pp>p2[next-1]){p2[next]=pp;w2[next]=ww;next++;}while(k<=h&&p2[k]<=p2[next-1])k++;}while(k<=h){p2[next]=p2[k];w2[next]=w2[k];next=next+1;k++;}l=h+1;h=next-1;F[i+1]=next;}for(i=1;i<next;i++)printf("%2d%2d ",p2[i],w2[i]);for(i=n;i>0;i--){next=F[i];next--;pp=pk=p2[next];ww=w2[next];while(ww+w[i]>M&&next>F[i-1]){next=next-1;pp=p2[next];ww=w2[next];}if(ww+w[i]<=M&&next>F[i-1])px=pp+p[i];if(px>pk&&ww+w[i]<=M){s[i]=1;M=M-w[i];printf("M=%d ",M);}else s[i]=0;}for(i=1;i<=n;i++)printf("%2d ",s[i]);}六、实验结果1、贪心法截图:七、实验分析。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四“0-1”背包问题
一、实验目的与要求
熟悉C/C++语言的集成开发环境;
通过本实验加深对贪心算法、动态规划算法的理解。
二、实验内容:
掌握贪心算法、动态规划算法的概念和基本思想,分析并掌握“0-1”背包问题的求解方法,并分析其优缺点。
三、实验题
1.“0-1”背包问题的贪心算法
2.“0-1”背包问题的动态规划算法
说明:背包实例采用教材P132习题六的6-1中的描述。
要求每种的算法都给出最大收益和最优解。
设有背包问题实例n=7,M=15,,(w0,w1,。
w6)=(2,3,5,7,1,4,1),物品装入背包的收益为:(p0,p1,。
,p6)=(10,5,15,7,6,18,3)。
求这一实例的最优解和最大收益。
四、实验步骤
理解算法思想和问题要求;
编程实现题目要求;
上机输入和调试自己所编的程序;
验证分析实验结果;
整理出实验报告。
五、实验程序
// 贪心法求解
#include<iostream>
#include"iomanip"
using namespace std;
//按照单位物品收益排序,传入参数单位物品收益,物品收益和物品重量的数组,运用冒泡排序
void AvgBenefitsSort(float *arry_avgp,float *arry_p,float *arry_w );
//获取最优解方法,传入参数为物品收益数组,物品重量数组,最后装载物品最优解的数组和还可以装载物品的重量
float GetBestBenifit(float*arry_p,float*arry_w,float*arry_x,float u);
int main(){
float w[7]={2,3,5,7,1,4,1}; //物品重量数组
float p[7]={10,5,15,7,6,18,3}; //物品收益数组
float avgp[7]={0}; //单位毒品的收益数组
float x[7]={0}; //最后装载物品的最优解数组
const float M=15; //背包所能的载重
float ben=0; //最后的收益
AvgBenefitsSort(avgp,p,w);
ben=GetBestBenifit(p,w,x,M);
cout<<endl<<ben<<endl; //输出最后的收益
system("pause");
return 0;
}
//按照单位物品收益排序,传入参数单位物品收益,物品收益和物品重量的数组,运用冒泡排序
void AvgBenefitsSort(float *arry_avgp,float *arry_p,float *arry_w )
{
//求出物品的单位收益
for(int i=0;i<7;i++)
{
arry_avgp[i]=arry_p[i]/arry_w[i];
}
cout<<endl;
//把求出的单位收益排序,冒泡排序法
int exchange=7;
int bound=0;
float temp=0;
while(exchange)
{
bound=exchange;
exchange=0;
for(int i=0;i<bound;i++)
{
if(arry_avgp[i]<arry_avgp[i+1])
{
//交换单位收益数组
temp=arry_avgp[i];
arry_avgp[i]=arry_avgp[i+1];
arry_avgp[i+1]=temp;
//交换收益数组
temp=arry_p[i];
arry_p[i]=arry_p[i+1];
arry_p[i+1]=temp;
//交换重量数组
temp=arry_w[i];
arry_w[i]=arry_w[i+1];
arry_w[i+1]=temp;
exchange=i;
}
}
}
}
//获取最优解方法,传入参数为物品收益数组,物品重量数组,最后装载物品最优解的数组和还可以装载物品的重量
float GetBestBenifit(float*arry_p,float*arry_w,float*arry_x,float u) {
int i=0; //循环变量i
float benifit=0; //最后收益
while(i<7)
{
if(u-arry_w[i]>0)
{
arry_x[i]=arry_w[i]; //把当前物品重量缴入最优解数组
benifit+=arry_p[i]; //收益增加当前物品收益
u-=arry_w[i]; //背包还能载重量减去当前物品重量cout<<arry_x[i]<<" "; //输出最优解
}
i++;
}
return benifit; //返回最后收益
}
//动态规划法求解
#include<>
#include<>
#define n 6
void DKNAP(int p[],int w[],int M,const int m); void main()
{
int p[n+1],w[n+1];
int M,i,j;
int m=1;
for(i=1;i<=n;i++)
{
m=m*2;
printf("\nin put the weight and the p:");
scanf("%d %d",&w[i],&p[i]);
}
printf("%d",m);
printf("\n in put the max weight M:");
scanf("%d",&M);
DKNAP(p,w,M,m);
}
void DKNAP(int p[],int w[],int M,const int m) {
int p2[m],w2[m],pp,ww,px;
int F[n+1],pk,q,k,l,h,u,i,j,next,max,s[n+1];
F[0]=1;
p2[1]=w2[1]=0;
l=h=1;
F[1]=next=2;
for(i=1;i<n;i++)
{
k=l;
max=0;
u=l;
for(q=l;q<=h;q++)
if((w2[q]+w[i]<=M)&&max<=w2[q]+w[i])
{
u=q;
max=w2[q]+w[i];
}
for(j=l;j<=u;j++)
{
pp=p2[j]+p[i];
ww=w2[j]+w[i];
while(k<=h&&w2[k]<ww)
{
p2[next]=p2[k];
w2[next]=w2[k];
next++;
k++;
}
if(k<=h&&w2[k]==ww)
{
if(pp<=p2[k])
pp=p2[k];
k++;
}
else if(pp>p2[next-1])
{
p2[next]=pp;
w2[next]=ww;next++;
}
while(k<=h&&p2[k]<=p2[next-1])
k++;
}
while(k<=h)
{
p2[next]=p2[k];
w2[next]=w2[k];
next=next+1;
k++;
}
l=h+1;
h=next-1;
F[i+1]=next;
}
for(i=1;i<next;i++)
printf("%2d%2d ",p2[i],w2[i]);
for(i=n;i>0;i--)
{
next=F[i];
next--;
pp=pk=p2[next];
ww=w2[next];
while(ww+w[i]>M&&next>F[i-1])
{
next=next-1;
pp=p2[next];
ww=w2[next];
}
if(ww+w[i]<=M&&next>F[i-1])
px=pp+p[i];
if(px>pk&&ww+w[i]<=M)
{
s[i]=1;
M=M-w[i];
printf("M=%d ",M);
}
else s[i]=0;
}
for(i=1;i<=n;i++)
printf("%2d ",s[i]);
}
六、实验结果
1、贪心法截图:
七、实验分析。