一.问题分析
利用优先队列,以结点的价值上界作为优先值.这里要用到的头文件:<queue>的容器priority_queue.
它的特点是会在内部按特征值自动排序
当优先队列的数据结构是struct时写法如下
struct PState
{
....
//成员函数、构造函数、数据成员部分
friend bool operator <(const PState& a, const PState& b)
{
return a.up < b.up; //up值从小到大--推算-->优先级从小到大
}
};
priority_queue <PState> q;
二.代码实现
分为三部分:全局变量 & 上界函数 & 遍历函数 & 初始化及调用及打印函数
1.全局变量
#include"allh.h"
//采用优先队列的01背包问题
//Priority_queue是可排序的queue,top()返回最大值元素
//物品结构
vector<int>W2 = { 2,5,4,2 };
vector<int>V2 = { 6,3,5,4 };
int N2 = (int)V2.size();
int bestp2; //记录最优值
vector<bool>bestx2; //记录最优解
int Volume2; //记录购物车总容量
int sumv2, sumw2; //全部物品总重量和总价值
//性价比结构,用于排序
struct Object
{
int id; //表示顺序
double quo; //记录性价比
};
2.上界函数Bou