- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(华电科院)算法设计与分析实验报告—01背包问题
课程设计报告
( 2013 -- 2014 年度第 一 学期)
名 称: 算法设计与分析
题 目 0—1背包问题
院 系: 信息工程
班 级: 网络11k1
学 号:
学生姓名:
指导教师: 牛华为
设计周数: 1周
成 绩:
日期:2013年 11月 15
一、目的和要求
了解并掌握动态规划算法;
用动态规划算法解决0-1背包问题。
二、实验环境
用VC6.0软件进行编程
三、实验内容
0-1背包问题:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为c。问应如何选择装入背包中的物品,使得装入背包中的物品的总价值最大?
在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分物品i。0-1背包问题是一个特殊的整数规划问题。
四、?问题分析
在0/1背包问题中物体或者被装入背包或者不被装入背包只有两种选择。?循环变量i、j意义:前i个物品能够装入载重量为j的背包中,数组c意义:c[i][j]表示前i个物品能装入载重量为j的背包中物品的最大价值。若w[i]j第i个物品不装入背包?,否则若w[i]=j且第i个物品装入背包后的价值c[i-1][j],则记录当前最大价值,替换为第i个物品装入背包后的价值。??
?其c++部分代码如下:
#includeiostream.h
void knapsack(int a[100][100],int s[100],int v[100],int n,int C)
{
for(int i=0;i=C;i++)
{
a[0][i]=0;
}
for( i=1;i=n;i++)
{
a[i][0]=0;
for(int j=1;j=C;j++)
{
if(s[i]=j)
{
if(v[i]+a[i-1][j-s[i]]a[i-1][j])
a[i][j]=v[i]+a[i-1][j-s[i]];
else
a[i][j]=a[i-1][j];
}
else
a[i][j]=a[i-1][j];
}
}
}
void outputsack(int a[100][100], int x[100],int s[100],int n,int C)
{
for(int k=n;k=1;k--)
{
if(a[k][C]=a[k-1][C])
x[k]=0;
else
{
x[k]=1;
C=C-s[k];
}
}
x[1]=a[1][C]?1:0;
}
int main()
{
int a[100][100];
int s[100];
int v[100];
int x[100];
int C,n;
cout请输入物品的总个数n:endl;
cinn;
cout请输入背包的总容量C:endl;
cinC;
cout请依次输入物品的体积s[i]:endl;
for(int i=1;i=n;i++)
{cins[i];}
cout请对应输入物品的价值v[i]:endl;
for( i=1;i=n;i++)
{cinv[i];}
knapsack(a,s,v,n,C);
outputsack(a,x,s,C,n);
//max(s,v);
//for( i=1;i=n;i++)
//coutx[i];
cout最大价值是:endl;
couta[n][C]endl;
return 0;
}
五、调试过程及实验结果
六、总结
01背包问题是最基本的背包问题,它包含了背包问题中设计状态、方程的最基本思想,另外,别的类型的背包问题往往也可以转换成01背包问题求解。
实验二:贪心算法解0—1背包问题
一、实验目的
学习掌贪心算法法思想。
二、实验内容
用贪心法求解0—1背包问题,并输出问题的最优解。
问题描述:给定n种物品和一背包。物品i的重量是Wi,其价值为Vi,背包的容量是c,问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。
三、实验条件
用VC6.0软件进行编程。
四、需求分析
对于给定n种物品和一背包。在容量最大值固定的情况下,要求装入的物品价值最大化。
五、基本思想:
总是对当前的问题作
文档评论(0)