• 大小: 2KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: C/C++
  • 标签: 回溯法  C++  

资源简介

给定N种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量为c。应该如何选择装入背包的物品,使装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有2种选择,即装入背包或不装入背包,不能将物品i装入背包多次,也不能只装入部分的物品i

资源截图

代码片段和文件信息

#include 
#include 
int n; //物品数量
double c; //背包容量
double p[100]; //排序后物品价值
double pp[100]; //物品价值
double w[100]; //排序后物品重量
double ww[100]; //物品重量
double cw=0.0; //当前重量
double cp=0.0; //当前价值
double bestp=0.0; //当前最优价值
double perp[100]; //单位物品价值(排序后)
int order[100];    //排序
int put[100]; //0为不装,1为装


void Knapsack()//按单位价值排序函数
{
    int ij;
    int temporder=0;
    double temp=0.0;
    for(i=1;i<=n;i++) 
    {
        put[i]=0;
        order[i]=i;
        p[i]=pp[i];
        w[i]=ww[i];
    }
    for(i=1;i<=n;i++)
        perp[i]=pp[i]/ww[i];
    for(i=1;i<=n-1;i++)
        for(j=i+1;j<=n;j++)
            if(perp[i]            {
                temp=perp[i];
                perp[i]=perp[j];
                perp[j]=temp;
                temporder=order[i];
                order[i]=order[j];
                order[j]=temporder;
                temp=p[i];
                p[i]=p[j];
                p[j]=temp;
               

评论

共有 条评论