#include "iostream"
#include "vector"
#include "cstring"
using namespace std;
class PackEnum
{
protected:
vector<int> m_p;
vector<int> m_w;
int m_c;
int m_num;
public:
PackEnum();
PackEnum(vector& p,vector& w, int c,int n)
:m_p(p),m_w(w),m_c(c),m_num(n)
{}
void GetBestValue();
void init(vector& p);
};
void PackEnum::init(vector& p)
{
int i;
for(i=0;i
p[i]=p.size()-i;
}
inline void PackEnum::GetBestValue ()
{
int bestValue=0;
int currentValue =0;
int currentWeight =0;
int MaxWeight=0;
vector a(m_num);
init(a);
unsigned int i;
unsigned int bit1;;
unsigned int Fbit;
const unsigned int max = 2 << m_num;
for( i =0; i
{
currentValue =0;
currentWeight =0;
unsigned int bit = i;
bit1=bit;
int j =0;
while(bit !=0)
{
currentWeight += m_w[j] * (bit & 1);
currentValue += m_p[j] * (bit & 1);
bit >>=1;
++j;
}
if(currentWeight <=m_c && bestValue < currentValue)
{
bestValue = currentValue;
MaxWeight = currentWeight;
Fbit = bit1;
}
}
cout<<"背包最大载重为:"<
cout
for(i=a.size()-1;i>=0;i--)
{
if((Fbit & 1 )!=0)
cout<
Fbit >>=1;
}
cout<<endl;
}
int main()
{
int n;
int m;
int i;
cout<<"请输入商品个数:";
cin >>n;
cout<<"请输入背包承受的最大质量:";
cin >>m;
vector w(n);
vector p(n);
for( i=0;i
{
cin >> w[i];
cin >> p[i];
}
PackEnum pack(p,w,m,n);
pack.GetBestValue();
return 0;
}
这是算法,求大神做一下流程图和时间复杂度。谢大神!