# include <iostream>
using namespace std;
int *answer;//存储解向量
struct Node{
Node* parent;//父节点
Node* next;
int level;//深度:0,1……
int tag;//输出最优解各个分量x的值
int CC;//可用剩余空间
int CV;//已装物品价值
double CUB;//该状态下,可行解所能达到可能价值的一个上界
};
class Knap{
private:
Node *first;//优先队列队首
Node *jie;//解节点
Node *root;//根结点
int *p;//物品价值队首
int *w;//物品重量队首
int n;//物品数
int c;//背包容量
double prev;
public:
Knap(int *P,int *W,int N,int C);//构造函数
~Knap();//析构函数
//void Sort();
double UBound(int cap,int cv,int k);
double LBound(int cap,int cv,int k);
Node* NewNode(Node* par,int t,double cub);//生成结点
void AddNode(Node* node);//并加入优先列表
void Finish();
Node *GetNode();
void LCKNAP();
double max(double a,double b);
};
Knap::Knap(int *P,int *W,int N,int C)
{
n=N;
c=C;
p=new int[n];
w=new int[n];
for(int i=0;i<n;i++)
{
p[i]=P[i];
w[i]=W[i];
}
first=new Node[1];
first->next=NULL;
jie=new Node[1];
jie->next=NULL;
prev=0;
}
Knap::~Knap(){
delete[] p;
delete[] w;