没有合适的资源?快使用搜索试试~ 我知道了~
首页0-1背包问题的贪心、动态规划、回溯算法
0-1背包问题的贪心、动态规划、回溯算法

"0-1"背包问题的贪心算法 "0-1"背包问题的动态规划算法 "0-1"背包问题的回溯算法
资源详情
资源评论
资源推荐

实验二 算法实现二
一、 实验目的与要求
熟悉 C/C++语言的集成开发环境;
通过本实验加深对贪心算法、动态规划和回溯算法的理解。
二、 实验内容:
掌握贪心算法、动态规划和回溯算法的概念和基本思想,分析并掌握"0-1"背包问题的
三种算法,并分析其优缺点。
三、 实验题
1. "0-1"背包问题的贪心算法
2. "0-1"背包问题的动态规划算法
3. "0-1"背包问题的回溯算法
四、 实验步骤
理解算法思想和问题要求;
编程实现题目要求;
上机输入和调试自己所编的程序;
验证分析实验结果;
整理出实验报告。
五、 实验程序
1、"0-1"背包问题的贪心算法
#include<stdio.h>
void Sort(int n,float v[],float w[]) //按物品单位重量价值从大到小排序
{
float temp,temp1;
1

for(int i=1;i<n;i++)//冒泡排序
for(int j=0;j<n-i;j++)
{
float a=v[j]/w[j];
float b=v[j+1]/w[j+1];
if(a<b)
{
temp=v[j];
v[j]=v[j+1];
v[j+1]=temp;
temp1=w[j];
w[j]=w[j+1];
w[j+1]=temp1;
}
}
}
void main()
{
int n,i;
float value=0;//记录最优值
printf("请输入物品个数:\n");
scanf("%d",&n);
float v[20],w[20],c;
int x[20];
2

printf("请输入背包容量:\n");
scanf("%f",&c);
printf("请分别输入物品的价值和重量:\n");
printf("%d 个重量:\n",n);
for(int k=0;k<n;k++)
{
scanf("%f",&w[k]);
}
printf("%d 个价值:\n",n);
for(int j=0;j<n;j++)
{
scanf("%f",&v[j]);
}
Sort(n,v,w); //调用排序函数
printf("排序后输出各个物品的重量顺序\n");
for(i=0;i<n;i++)
{
printf("%f ",w[i]);
}
for(i=0;i<n;i++)
{
x[i]=0;
}
3

for(i=0;i<n;i++)
{
if(w[i]>c) //背包容不下该物品时
{
x[i]=0;
}
else // 背包可以装下时
{
x[i]=1;
value=value+v[i];
c=c-w[i];
}
}
printf("\n 放入背包中的最优值为:%f\n ",value);
printf("所有物品在背包的存放情况为(0 表示没有放入,1 表示放入):\n ");
for(i=0;i<n;i++)
printf("%d ",x[i]);
printf("\n");
}
2、"0-1"背包问题的动态规划
#include<stdio.h>
int min(int x,int y)//求最小值函数
{
if(x<y)
4
剩余16页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1