您的位置:首页 > 编程语言

背包问题_一些代码

2013-07-18 18:41 162 查看
学长给的代码:

可作参考void pack01(int a, int b) //0 - 1 背包
{
int i;
for(i = Sum; i >= a; i ++)
dp[i] = maxz(dp[i-a] + b, dp[i]);
}

void packcmp(int a, int b) //完全背包
{
int i ;
for(i = a; i <= Sum; i ++)
dp[i] = maxz(dp[i-a] + b, dp[i]);
}

void packmul() //多重背包
{
int i, k;
for(i = 1; i <= n; i ++)
{
if(num[i] * w[i] >= Sum)
{
packcmp(w[i], g[i]);
}
else
{
int k = 1;
int amount = num[i];
while( k < amount)
{
pack01(k * w[i], k * g[i]);
amount -= k;
k *= 2;
}
pack01(amount * w[i], amount * g[i]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: