資源簡介
回溯法解決0-1背包問題
代碼片段和文件信息
#include?
#include?
using?namespace?std;
#define?MAX_NUM?200
int?n?=?0?W?=?0;
int?w[MAX_NUM]?v[MAX_NUM];
int?cw?=?0?cp?=?0;
int?x[MAX_NUM]?bestx[MAX_NUM];
int?bestp?=?0;
int?sumw?=?0?sumv?=?0;
int?bound(int?i)
{
int?rp?=?0;
while?(i?<=?n)
{
rp?+=?v[i];
++i;
}
return?cp?+?rp;
}
void?backstrack(int?t)
{
if?(t?>?n)
{
for?(int?i?=?1;?i?<=?n;?++i)
{
bestx[i]?=?x[i];
}
bestp?=?cp;
return;
}
if?(cw?+?w[t]?<=?W)
{
x[t]?=?1;
cw?+=?w[t];
cp?+=?v[t];
backstrack(t?+?1);
cw?-=?w[t];
cp?-=?v[t];
評論
共有 條評論