资源简介

http://blog.csdn.net/effective_coder/article/details/8736718#cpp 博客开始的背包问题不能达到完美效果,改进,使用博主说的第一种策略和第三种策略结合

资源截图

代码片段和文件信息

//http://blog.csdn.net/effective_coder/article/details/8736718
//贪心算法
/*
背包问题:有一个背包,背包容量是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
#define Num 7
using namespace std;

//构造数据结构
struct Node{
char char_mark; //物品
double weight; //重量
double value; //价值
bool mark; //是否已经放到容器中
double pre_weight_value; //单位重量价值
};

int main(){
double Weight[Num]={35306050401025};
double Value[Num]={10403050354030};
    cout<<“七种物品的重量和价值:“<    for(int index=0;index        cout<<“weight:“<    }
Node array[Num]; //Node数组用来装载值
//初始化
cout<<“七种物品的单位重量价值:“< for(int i=0;i array[i].char_mark=65+i;
array[i].weight=Weight[i];
array[i].value=Value[i];
array[i].mark=false;
array[i].pre_weight_value=Value[i]/Weight[i];
cout<<“第“< }

double weight_all=0.0;
double value_all=0.0;
double max=0.0;
char charArray[7]; //记录已经选中的结点
int flagn=0; //flag记录当前比重最大的元素序号,以序号0为初始值

w

评论

共有 条评论